Pessoal,
Passei o dia tentando fazer isto abaixo funcionar.
Alguém poderia me ajudar, por favor?
Consegui criar as miniaturas das imagens usando a lib de Images do Google, mas não consigo modificar os campos da tabela com o blob destas miniaturas.
Quero fazer isso no instante em que a imagem é subida para o servidor, mas estou em dúvida...
Posso incluir variáveis no "request" para que elas sejam inseridas na base de dados ao chamar o form.accepts() ?
É normal inserir numa tabela, ao fazer um post, e logo depois de inserir, na mesma função, fazer buscas para fazer modificações no registro inserido?
É o que estou fazendo e funciona local no SDK do GAE, mas NÃO funciona no GAE remoto! Como?
# insere uma marca a partir do formulario
def criar():
form=SQLFORM(db.marcas)
if request.vars:
#redimensiona a imagem e gera os logotipos nos tamanhos informados...
imagens = validaImagemOriginal(request.vars.upl_logotipo,[50,100,200],request.vars.nome)
# zera a imagem original do usuario para evitar que tente gravar e de erro pelo tamanho > 1MB
request.vars.pop('upl_logotipo')
# se de algum erro ao gerar ou redimensionar as imagens retorna... (tratar)
if not 'original' in imagens:
return dict(form=form)
else:
pass
#return dict(form=form)
if form.accepts(request.vars):
# busca a marca que acabou de ser inserida
marca = db(db.marcas.nome == request.post_vars['nome']).select().first()
# atualiza a url_key (usado para achar a imagem pelo nome)
marca.update_record(url_key=textoParaURL(request.post_vars['nome']))
# atualiza a imagem e os thumbs
marca.update_record(img_logotipo=imagens['original'])
marca.update_record(t_logotipo_50=imagens['t50'])
marca.update_record(t_logotipo_100=imagens['t100'])
marca.update_record(t_logotipo_200=imagens['t200'])
return dict(form=form)
Este é o modelo da tabela de marcas....
db.define_table('marcas',
Field('nome',
unique=True,
label="Nome",
required = True,
),
# serve para a entrada da imagem do logotipo, apenas.
Field('upl_logotipo', 'upload',
uploadfield='img_logotipo',
label="Logotipo",
length = 1000*1024,
required = True,
),
# logotipo, efetivamente armazenado
Field('img_logotipo', 'blob'),
# copias do logotipo, de vários tamanhos
Field('t_logotipo_50', 'blob'),
Field('t_logotipo_100', 'blob'),
Field('t_logotipo_200', 'blob'),
# armazena o valor que vem na URL para identificar a marca
Field('url_key',
readable=False,
writable=False,
),
)
--
--
Atenciosamente,
Alex BENFICA
--
"O que não se mede não se gerencia."