Prós e contras de diferentes abordagens para programação web em Python

votos
24

Eu gostaria de fazer alguns scripts do lado do servidor usando Python. Mas eu estou meio perdido com o número de maneiras de fazer isso.

Ela começa com a abordagem CGI do-it-yourself e parece terminar com algumas estruturas muito robustas que seria basicamente fazer todo o trabalho eles mesmos. E um enorme monte de coisas no meio, como web.py , Pyroxide e Django .

  • Quais são os prós e contras dos quadros ou abordagens que você trabalhou em ?
  • O trade-offs existem?
  • Para que tipo de projectos que fazem bem e para o que não fazer?

Edit: Eu não tenho muita experiência com programação web ainda.
Eu gostaria de evitar as coisas básicas e tediosas como analisar o URL para os parâmetros, etc.
Por outro lado, enquanto o vídeo de blogue criado em 15 minutos com Ruby on Rails me deixou impressionado, eu percebi que havia centenas de coisas escondidas de mim - o que é legal se você precisa escrever um webapp trabalhando em nenhum momento, mas não tão grande para realmente compreender a magia - e isso é o que eu procuro agora.

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


9 respostas

votos
17

CGI é ótimo para sites de baixo tráfego, mas tem alguns problemas de desempenho para qualquer outra coisa. Isso ocorre porque cada vez que um pedido chega, o servidor inicia a aplicação CGI em seu próprio processo. Isso é ruim por dois motivos: 1) iniciar e parar uma processo pode levar tempo e 2) você não pode armazenar em cache qualquer coisa na memória. Você pode ir com FastCGI, mas eu diria que você seria melhor fora de apenas escrever um straight WSGI app se você estiver indo para ir por esse caminho (o caminho WSGI funciona realmente não é um pedaço inteiro de muito diferente do CGI ).

Fora isso, suas escolhas são, na maior parte de quanto você quer a estrutura para fazer. Você pode ir com um todo canto, toda estrutura dançando como Django ou Pylons. Ou você pode ir com uma abordagem mix-and-match (usar algo como CherryPy para o material HTTP, SQLAlchemy para o material do banco de dados, pasta de implantação, etc). Gostaria também de salientar que a maioria dos frameworks também irá permitir que você alternar componentes diferentes para fora para os outros, de modo que essas duas abordagens não são mutuamente exclusivas.

Pessoalmente, eu não gosto estruturas que fazem muita magia para mim e preferem a técnica mix-and-match, mas eu tenho dito que eu também sou completamente louco. :)

Quanto web experiência de programação que você tem? Se você é um novato, eu digo ir com Django. Se você é mais experiente, eu digo a brincar com as diferentes abordagens e técnicas até encontrar o caminho certo.

Respondeu 04/09/2008 em 14:35
fonte usuário

votos
12

O programa de web mais simples é um script CGI, que é basicamente um programa cuja saída padrão é redirecionada para o navegador web que faz o pedido. Nesta abordagem, cada página tem seu próprio arquivo executável, que deve ser carregado e analisado em cada solicitação. Isto torna muito simples para obter algo em funcionamento, mas escalas mal tanto em termos de desempenho e organização. Então, quando eu precisar de uma página muito dinâmica muito rapidamente que não vai crescer em um sistema maior, eu uso um script CGI.

Um passo-se a partir deste é a incorporação de seu código Python em seu código HTML, tal como com a PSP. Eu não acho que muitas pessoas usam isso hoje em dia, uma vez que os sistemas de modelos modernos têm feito isso muito obsoleta. Eu trabalhei com PSP por algum tempo e descobriu que ele tinha basicamente os mesmos limites organizacionais como scripts CGI (cada página tem seu próprio arquivo) mais alguns aborrecimentos relacionados com o espaço em branco do tentando misturar HTML espaços em branco-ignorante com Python sensível ao espaço em branco.

O próximo passo é frameworks web muito simples, como web.py, que eu também usei. Como scripts CGI, é muito simples para obter algo pronto e funcionando, e você não precisa de nenhuma configuração complexa ou código gerado automaticamente. Seu próprio código será bastante simples de entender, para que possa ver o que está acontecendo. No entanto, não é tão como outros frameworks web rica em recursos; última vez que eu usei, não houve rastreamento de sessão, então eu tinha que fazer a minha própria. Ele também tem "comportamento muito mágico", para citar Guido ( "upvars (), bah").

Finalmente, você tem ricos em recursos frameworks web como Django. Estes irão exigir um pouco de trabalho para obter simples Olá Mundo programas de trabalho, mas todos os grandes tem um grande, tutorial bem escrito (especialmente Django) para orientá-lo através dele. Eu recomendo usar um desses frameworks web para qualquer projeto real por causa da conveniência e características e documentação, etc.

Finalmente você terá que decidir o que você preferir. Por exemplo, Estruturas todas as línguas modelo (código / tag especial) para gerar arquivos HTML. Alguns deles, como modelos de chita deixar você escrever código Python arbitrário de modo que você pode fazer qualquer coisa em um modelo. Outros, como modelos de Django são mais restritivas e forçá-lo a separar o seu código de apresentação do seu lógica do programa. É tudo sobre o que você, pessoalmente, prefiro.

Outro exemplo é a manipulação de URL; algumas estruturas, como Django tem de definir os URLs em seu aplicativo através de expressões regulares. Outros, como CherryPy mapear automaticamente as suas funções para urls por seus nomes de função. Novamente, isso é uma preferência pessoal.

Eu pessoalmente uso uma mistura de frameworks web usando CherryPy para meu material servidor web (parâmetros de formulário, manipulação de sessão, mapeamento de URL, etc) e Django para o meu mapeamento e modelos objeto-relacional. Minha recomendação é começar com um framework web de alto nível, trabalhar o seu caminho através do seu tutorial, em seguida, começar em um pequeno projeto pessoal. Eu fiz isso com todas as tecnologias que eu mencionei e tem sido muito benéfico. Eventualmente, você vai ter uma idéia do que você preferir e se tornar um melhor programador web (e um programador melhor no geral) no processo.

Respondeu 04/09/2008 em 15:11
fonte usuário

votos
7

Se você decidir ir com uma estrutura que é baseada em WSGI (por exemplo TurboGears ), eu recomendo que você vá através do excelente artigo Outro Do-It-Yourself Framework por Ian Bicking.

No artigo, ele constrói uma estrutura de aplicativo web simples a partir do zero.

Além disso, confira o vídeo Criando um framework web com WSGI por Kevin Dangoor. Dangoor é o fundador do projeto TurboGears.

Respondeu 04/09/2008 em 14:24
fonte usuário

votos
4

Se você quiser ir muito grande, escolha Django e você está definido. Mas se você quer apenas para aprender, rolar o seu próprio framework usando já mencionado WebOb - isso pode ser muito divertido e eu tenho certeza que você vai aprender muito mais (mais você pode usar componentes que você gosta: sistema de templates, expedidor url, camada de banco de dados, sessões, et caetera).

No últimos 2 anos eu construí alguns grandes sites usando Django e tudo que eu posso dizer, o Django irá preencher 80% das suas necessidades em 20% do tempo. 20% restantes de trabalho terá 80% do tempo, não importa qual o quadro que você usaria.

Respondeu 17/09/2008 em 21:04
fonte usuário

votos
3

É sempre vale a pena fazer algo da maneira mais difícil - uma vez - como um exercício de aprendizagem. Depois de entender como ele funciona, escolher uma estrutura que se adapte a sua aplicação, e usar isso. Você não precisa reinventar a roda quando você entender velocidade angular. :-)

Também vale a pena ter certeza de que você tem uma compreensão bastante robusto da linguagem de programação por trás do quadro antes de saltar - tentando aprender tanto Django e Python, ao mesmo tempo (ou Ruby e Rails, ou X e Y), pode levar a ainda mais confusão. Escrever algum código na língua em primeiro lugar, em seguida, adicione o quadro.

Nós aprendemos a desenvolver, não usando ferramentas, mas pela resolução de problemas. Correr em algumas paredes, subir mais, e encontrar algumas paredes mais altas!

Respondeu 21/10/2008 em 15:49
fonte usuário

votos
2

Se você estiver usando Python você deve não começar com CGI, em vez começar com WSGI (e você pode usar wsgiref.handlers.CGIHandler para executar o script WSGI como um script CGI. O resultado é algo que é basicamente como de baixo nível como CGI ( que pode ser útil em um sentido educacional, mas também será um pouco chato), mas sem ter que escrever para uma interface totalmente desatualizado (e obrigatória a sua aplicação a um único modelo de processo).

Se você quiser uma interface de baixo nível menos irritante, mas da mesma forma, usando WebOb daria isso. Você seria implementar tudoa lógica, e haverá alguns cantos escuros que você não vai entender, mas você não terá que gastar tempo tentando descobrir como analisar datas HTTP (eles são estranhos!) ou analisar corpos POST. I escrever aplicações desta maneira (sem qualquer outra estrutura) e é inteiramente viável. Como um novato, eu aconselho isso, se você estava interessado em entender o que os quadros fazer, porque é inevitável que você vai escrever o seu próprio mini-quadro. OTOH, um quadro real, provavelmente vai te ensinar boas práticas de design e estrutura de aplicação. Para ser um bom programador web, eu acredito que você precisa experimentar tanto a sério; você deve entender tudo um quadro faz e não ter medo de seus internos, mas você também deve passar um tempo em um ambiente de alguém pensativo pessoa concebido (ou seja,

Respondeu 30/07/2009 em 22:44
fonte usuário

votos
2

Se você nunca fez qualquer programação CGI antes que eu acho que seria vale a pena fazer um projeto - talvez apenas um local de jogo de amostra apenas para si mesmo - usando a abordagem DIY. Você vai aprender muito mais sobre como as várias partes trabalham do que você faria usando um quadro. Isso vai ajudar no que você projetar e depurar e assim por diante todas as suas aplicações web futuros, contudo, você escrevê-los.

Pessoalmente eu uso agora Django . O benefício real é a implantação de aplicativos muito rápido. O mapeamento objeto relacional recebe as coisas em movimento rápido e o modelo de biblioteca é uma alegria para usar. Além disso, a interface de administração dá-lhe telas CRUD básicos para todos os seus objetos, de modo que você não precisa de escrever nenhuma das coisas "chato".

A desvantagem de usar um ORM solução baseada é que se você quiser artesanato alguns SQL, digamos, por motivos de desempenho, é muito mais difícil do que teria sido de outra forma, embora ainda muito possível.

Respondeu 04/09/2008 em 14:17
fonte usuário

votos
1

Para projetos menores, rolando seu próprio país é bastante fácil. Especialmente quando você pode simplesmente importar um motor de templates como Genshi e obter um monte acontecendo muito rapidamente e facilmente. Às vezes é apenas mais rápido usar uma chave de fenda do que ir procurando a furadeira.

enquadramentos completo soprado fornecer muito mais poder, mas tem que ser instalado e configurado antes que você possa alavancar esse poder. Para projetos maiores, esta é uma preocupação insignificante, mas para projetos menores este pode acabar levando a maioria do seu tempo - especialmente se o quadro é desconhecido.

Respondeu 09/12/2009 em 14:02
fonte usuário

votos
1

OK, trilhos é realmente muito bom, mas não é apenas um pouco demais mágica acontecendo lá dentro (do mundo de Ruby Eu prefiro muito mais merb para trilhos). Eu pessoalmente uso Pilares, e estou muito danado feliz. Eu diria que (em comparação a Django), que postes permite trocar ints partes internas mais fácil do que o Django faz. A desvantagem é que você terá que escrever mais coisas tudo pelo youself (como o CRUD básica).

Vantagens de utilizar um quadro:

  1. obtêm o material feito rapidamente (e eu quero dizer lighning rápido quando você sabe do quadro)
  2. tudo é compying com os padrões (que provavelmente não é assim tão fácil de conseguir quando rolar seus próprios)
  3. mais fácil de obter algo de trabalho (muitos tutoriais) sem ler artigos zilhão e docs

contras:

  1. você aprende menos
  2. mais difícil de substituir peças (não que um grande problema em postes, mais com Django)
  3. mais difícil de ajustar algumas coisas de baixo nível (como os SQLs acima mencionados)

Desde que você provavelmente pode imaginar o que eles são bons para :-) Desde que você começa todo o código é possível ajustá-lo para caber mesmo nas situações mais bizarras (postes supostamente trabalhar no Google app engine agora ...).

Respondeu 04/09/2008 em 20:55
fonte usuário

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