Um framework de aplicações web python para acoplamento / GUI apertado DB?

votos
11

Eu sou um crente firme do pensamento herético de acoplamento forte entre o backend e frontend: Eu quero existentes, implícita conhecimento sobre um servidor a ser automaticamente feito uso na geração de interfaces de usuário. Por exemplo, se uma coluna VARCHAR tem um máximo de 20 caracteres, não deve restringir GUIs automaticamente o utilizador de digitação mais de 20 caracteres na forma de um campo relacionado.

E eu tenho forte antipatia para ORMs que deseja definir minhas tabelas de banco de dados, ou são baseados em algum hack onde cada tabela precisa ter colunas ID numérico extras por causa da ORM.

Eu olhei um pouco em estruturas de banco de dados Python e acho que podemos concluir o SQLAlchemy se encaixa melhor para a minha mentalidade.

Agora, eu preciso encontrar um framework de aplicações web que se encaixa naturalmente com SQLAlchemy (ou equivalente) e talvez até mesmo com meu apetite para o acoplamento. Com o framework de aplicações web, quer dizer produtos / projeto, como Pyhons, Django, TurboGears, web2py, etc.

Por exemplo, deve idealmente ser capaz de:

  • selecionar automaticamente um widget de forma adequada para os dados que entram em uma determinada coluna se disse para fazê-lo; por exemplo, se a coluna tem uma chave estrangeira a uma coluna com 10 valores diferentes, widget deve exibir os 10 valores possíveis como uma suspenso
  • auto-gerar o código javascript validação de formulário que dá o feedback de erro rápida de usuário final se uma string é inserido em um campo que está prestes a acabar em uma coluna INTEGER, etc
  • auto-gerar um widget de calendário para dados que vai acabar em uma coluna DATE
  • dica restrições NOT NULL como javascript que reclama de dados vazios ou somente espaços em branco em um campo de entrada relacionada
  • gerar javascript o código de validação que corresponde relevantes (simples) check-constrangimentos
  • torná-lo fácil de evitar a injeção SQL , usando instruções preparadas e / ou validação de dados derivados externamente
  • torná-lo fácil de evitar scripting cross site por escapar automaticamente seqüências de saída quando apropriado
  • fazer uso de nomes de restrição para gerar um pouco de utilizador mensagens de erro amigáveis no caso de um constrataint é violada

Tudo isso deve acontecer de forma dinâmica, de modo que os ajustes da tabela são automaticamente refletidas no frontend - provavelmente com um mecanismo de cache, de modo que todo o modelo de introspecção não mataria desempenho. Em outras palavras, eu não quero repetir a minha definição do modelo em um arquivo XML (ou similar) quando ele já foi cuidadosamente foi definido no meu banco de dados.

Será que esse quadro existe para Python (ou para qualquer idioma, para que o assunto)? Se não: Qual dos vários frameworks de aplicação web em Python será menos na forma como se eu fosse para adicionar partes do acima me apresenta?

Publicado 04/09/2008 em 09:53
fonte usuário
Em outras línguas...                            


5 respostas

votos
5

web2py faz a maior parte do que você perguntar:

Baseado em um tipo de campo e seus validadores que vai processar o campo com o widget apropriado. Você pode substituir com

db.table.field.widget=...

e usar um widget de terceiros.

web2py tem js para blocos do utilizador de inserir um número não inteiro de um campo inteiro ou uma não-dupla num campo duplo. hora, data e campos de data e hora têm seus próprios catadores. Estes trabalhos de validação js com (não vez) de validação do lado do servidor.

IS_EMPTY_OR(...)validador.

A DAL impede injeções SQL desde Ouvia escapou quando vai na DB.

web2py impede XSS porque em {{= variável}}, 'variável' é escapado a menos que especificado de outro modo {{= XML (variável)}} ou {{= XML (variável, higienizar = TRUE)}}

Mensagens de erro são argumentos de validadores por exemplo

db.table.field.requires=IS_NOT_EMPTY(error_message=T('hey! write something in here'))

T é para a internacionalização.

Respondeu 13/10/2008 em 18:31
fonte usuário

votos
3

Você deve ter um olhar para Django e especialmente seus newforms e administração módulos. O módulo newforms fornece uma boa possibilidade de fazer a validação do lado do servidor com a geração automática de mensagens de erro / páginas para o usuário. Adicionando validação ajax também é possível

Respondeu 04/09/2008 em 10:12
fonte usuário

votos
1

Eu sei que você especificidade pedir um quadro, mas eu pensei que eu iria deixá-lo saber sobre o que eu chegar até aqui. Acabo sofrido conversão de aplicação web da minha empresa a partir de uma camada ORM personalizado in-house em sqlalchemy por isso estou longe de ser um especialista, mas algo que me ocorreu foi que sqlalchemy tem tipos para todos os atributos ele mapeia a partir do banco de dados então por que não usar isso para ajudar a saída de html direita na página. Então, nós usamos sqlalchemy para o back-end e modelos de chita para o front-end, mas todo o resto é basicamente o nosso próprio ainda.

Nós nunca conseguiu encontrar um quadro que faz exatamente o que queremos sem compromisso e preferem obter todos os bits que funcionam certo para nós e escrever a cola nós mesmos.

Passo 1. Para cada tipo de dados sqlAlchemy.types.INTEGER etc. Adicionar um ToHTML adicional de função (ou muitos talvez toHTMLReadOnly, toHTMLAdminEdit qualquer outro) e só tem que devolver o modelo para o html, agora você não precisa nem se importa com o que os dados digite seu exibindo se você quiser apenas para cuspir uma tabela inteira você pode apenas fazer (como um modelo chita ou o que nunca o seu motor de templates é).

Passo 2

<table>

<tr>

#for $field in $dbObject.c:

<th>$field.name</th>

#end for

</tr>

<tr>

#for $field in dbObject.c:

<td>$field.type.toHtml($field.name, $field.value)</td>

#end for

</tr>

</table>

Usando este método básico e alongamento pítons introspecção ao seu potencial, em uma tarde eu consegui fazer criar atualização ler e apagar código para a nossa seção de administração toda a base de dados para fora, mas não com o polonês de Django, mas mais do que bom o suficiente para minhas necessidades.

Passo 3 Descoberto a necessidade de uma terceira etapa apenas na sexta-feira, queria fazer upload de arquivos que como sabem precisa mais do que apenas a caixa de texto padrão tipos de dados varchar. Sem suor, eu só cancelou a classe linhas na minha definição da tabela de VARCHAR para FilePath (VARCHAR), onde a única diferença foi FilePath tinha um método ToHTML diferente. Funcionou perfeitamente.

Tudo o que disse, se houver um psiquiatra envolvido por aí que faz exatamente o que você quer, use isso.

Disclaimer: Este código foi escrito a partir da memória após a meia-noite e provavelmente não vai produzir uma página web funcionando.

Respondeu 07/09/2008 em 15:39
fonte usuário

votos
1

TurboGears usa atualmente SQLObject por padrão, mas você pode usá-lo com SQLAlchemy . Eles estão dizendo que a próxima versão principal do TurboGears (1.1) vai usar SQLAlchemy por padrão.

Respondeu 07/09/2008 em 11:03
fonte usuário

votos
1

Eu acredito que os modelos do Django não suporta chaves primárias compostas (ver documentação ). Mas, talvez, você pode usar SQLAlchemy no Django? A pesquisa do Google indica que você pode. Eu não usei Django, então eu não sei.

Eu sugiro que você dê uma olhada:

Eu não tenho qualquer conhecimento profundo de qualquer um dos projetos acima. Estou apenas no processo de tentar acrescentar algo semelhante a um dos meus próprios aplicativos como o que a pergunta original menciona. A lista acima é simplesmente uma lista de projetos interessantes que eu ter tropeçado.

Quanto aos frameworks de aplicação web para Python, eu recomendo TurboGears 2. Não que eu tenha alguma experiência com qualquer um dos outros frameworks, eu só gosto TurboGears ...

Se o autor da pergunta original encontra uma solução que funciona bem, por favor, atualizar ou responder a esta discussão.

Respondeu 04/09/2008 em 10:42
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more