Python é, simultaneamente, uma ferramenta versátil e uma força a ser reconhecida. A sua aplicabilidade é tão vasta quanto a imaginação.
Desenvolvedores de todos os níveis, desde entusiastas a especialistas e cientistas, encontram valor no Python.
A sua curva de aprendizagem suave, aliada a abstrações complexas e recursos de metaprogramação, permite a construção de sistemas robustos. A vasta gama de bibliotecas facilita a implementação de praticamente qualquer funcionalidade. Embora existam limitações na concorrência e tipagem estática, estas podem ser contornadas.
Neste artigo, iremos analisar alguns dos frameworks Python mais notáveis para o desenvolvimento de aplicações web, de pequena a grande escala.
Django
O framework Django é um pilar na comunidade Python para desenvolvimento web. Um programador Python instintivamente escolherá o Django para a criação de aplicações web, assim como um programador Ruby o faria com o Rails.
Existe uma boa razão para isso. Django é, como o seu slogan proclama, “um framework web para perfeccionistas com prazos”. É um framework “baterias incluídas”, tal como o Python, que oferece uma variedade de funcionalidades prontas para uso.
Estas funcionalidades integradas aceleram o processo de desenvolvimento:
- Um ORM simples e eficiente, com migrações geradas e aplicadas automaticamente pelo framework.
- Geração automática de painel de administração a partir dos seus modelos.
- Suporte a cookies, sessões, middleware, templates, etc.
- Mecanismos de segurança como prevenção XSS e CSRF, são aplicados por padrão.
- Compatibilidade com uma ampla variedade de bases de dados.
- Suporte de excelência para dados geográficos e consultas espaciais através do GeoDjango
O Django é um framework web completo e intuitivo.
Será que o Django é para si?
Sem dúvida.
O Django é uma opção viável para diversos casos de uso, desde a prototipagem rápida até o desenvolvimento de aplicações empresariais. A única possível desvantagem é a estrutura imposta pelo framework. Para facilitar o desenvolvimento, o Django adota o conceito de “convenção sobre configuração”, que pode não agradar a todos. Por exemplo, substituir o Django ORM por outra opção, como SQL Alchemy, pode levar a desafios inesperados.
Está interessado em tornar-se um desenvolvedor full-stack com Django e Python? Consulte este curso online.
Flask
Apesar de o Django ser o centro das atenções no desenvolvimento web com Python, o Flask é um concorrente de peso.
Ao contrário do Django, o Flask é um “micro-framework”. Ele foca-se em funcionalidades essenciais, deixando as restantes decisões a cargo do utilizador. Este aspeto pode ser encarado como uma vantagem ou desvantagem, dependendo das suas necessidades. Para quem gosta de construir aplicações web com atenção ao detalhe e liberdade de escolha, o Flask é ideal.
O Flask oferece os seguintes recursos:
- Roteamento, modelagem, gestão de sessão e outras funcionalidades importantes.
- Suporte total para testes unitários.
- Uma arquitetura minimalista e modular.
- Suporte REST de primeira classe.
- Suporte para Blueprints, a abordagem única do Flask para arquitetura em pequenas aplicações web.
- Liberdade na escolha de pacotes para ORM, migrações, etc.
- Estrutura de aplicação flexível, permitindo organizar os arquivos como desejar.
- Serviço de ficheiros estáticos.
- Compatibilidade com WGSI.
O Flask é para si?
Como mencionado, o Flask é um framework web minimalista, com componentes individuais que podem ser substituídos. Se necessitar de criar um protótipo rapidamente, poderá perder tempo com decisões sobre base de dados, estrutura de pastas, roteamento, o que poderá ser contraproducente. O Flask é ideal para projetos de média a grande escala, especialmente APIs REST.
Bottle
Se considera a abordagem do Flask ainda não ser suficientemente minimalista e deseja um controlo ainda maior, então o Bottle é para si.
O Bottle leva o conceito de minimalismo ao extremo, dependendo apenas da biblioteca padrão do Python. Isso significa que não precisa instalar dependências adicionais, apesar de provavelmente precisar delas a curto prazo. Veja por que algumas pessoas preferem o Bottle:
- Implantação em um único ficheiro. Toda a aplicação reside em um único ficheiro “.py”.
- Sem dependências externas. Se tiver a versão correta do Python instalada, está pronto.
- Oferece o seu próprio motor de template, que pode ser trocado por Jinja2, Mako ou Cheetah.
- Suporte para formulários, cabeçalhos, cookies e uploads de ficheiros.
- Servidor web integrado, que pode ser substituído facilmente.
O Bottle é para si?
O Bottle é ideal para pequenas aplicações (com menos de 500 linhas de código) sem requisitos especiais. É uma abordagem prática para criar aplicações web, mas em cenários reais, poderá ser mais prejudicial que útil. A razão é que as necessidades do mundo real estão sempre a mudar. Novos requisitos surgirão rapidamente. Nesse ponto, ter tudo num único ficheiro torna-se um desafio.
Se considera o Bottle e o Flask semelhantes, tem razão. Existiram propostas para fundir os dois em 2012, e até Armin, o criador do Flask, concordou com isso. No entanto, Marcel, o criador do Bottle, insiste na sua distinção ideológica devido à sua abordagem de um único ficheiro.
Zope
O Zope é um framework complexo. É uma plataforma que consiste em ferramentas (incluindo frameworks web) desenvolvidas sob a filosofia Zope e mantidas pela Zope Corporation.
O Zope possui vários componentes e recursos adequados para o desenvolvimento de aplicações empresariais:
- Uma arquitetura de registo e descoberta de componentes para a configuração de grandes aplicações.
- ZODB — uma base de dados de objetos para Python para armazenar objetos nativamente.
- Estrutura e padrões completos para sistemas de gestão de conteúdos.
- Um conjunto de frameworks de aplicações web – o canónico ainda se chama Zope, embora vários novos frameworks (como o Grok) tenham sido construídos sobre ele.
- Padrões sólidos para o desenvolvimento, lançamento e manutenção de software.
O Zope é para si?
O Zope é adequado se procura um ambiente altamente estruturado para a criação de grandes aplicações. No entanto, enfrentará alguns desafios. Apesar de o Zope continuar a evoluir, a sua comunidade é relativamente pequena, sendo que muitos programadores Python nunca ouviram falar dele. Encontrar tutoriais e documentação extensiva é difícil, portanto, prepare-se para pesquisar. Além disso, os programadores Python podem não ter interesse em aprender Zope e “diluir” o seu conjunto de habilidades.
TurboGears
O TurboGears é um framework altamente flexível com uma arquitetura modular. É um framework dimensionável que pode ser usado para criar aplicações de um único ficheiro ou aplicações de multilocação.
O TurboGears oferece vários recursos elegantes:
- Suporte de primeira classe para diversas bases de dados.
- Transações em várias bases de dados.
- Altamente modular – comece com um único ficheiro e expanda conforme necessário.
- Um ORM poderoso (SQLAlchemy, mais maduro e capaz do que o ORM do Django).
- Arquitetura modular baseada na especificação WSGI.
- Suporte integrado para particionamento de bases de dados.
- Uma interface orientada a funções em vez de hierarquias orientadas a objetos rígidas.
O TurboGears é para si?
Se deseja desenvolver com satisfação e procura um framework robusto e bem estabelecido, o TurboGears é uma excelente opção. É altamente respeitado na comunidade e possui uma documentação abrangente. No entanto, o tempo de configuração inicial pode ser maior, uma vez que não é um framework opinativo. É ideal para o desenvolvimento de aplicações empresariais.
Web2py
O Web2py começou como um projeto amador em 2007. O seu objetivo é tornar o desenvolvimento web acessível a todos.
O Web2py leva a abordagem de zero dependências ao extremo – não há requisitos, nada para instalar, e inclui um editor web completo para desenvolvimento, gestão de base de dados e implementação.
Pode considerá-lo como o Android Studio, mais um ambiente completo do que apenas um framework. Algumas funcionalidades interessantes do Web2py são:
- Curva de aprendizagem suave.
- Núcleo minimalista (apenas 12 objetos).
- Modelo Python puro.
- Proteção contra XSS, CSRF e outros ataques.
- Uma API agradável e consistente.
O Web2py é para si?
O Web2py é um framework estável e divertido, mas é difícil recomendá-lo em comparação com outras opções como Django ou Flask. Existem poucas oportunidades de trabalho e o seu sistema de testes unitários não é ideal. No entanto, poderá aproveitar a sua API e experiência geral, especialmente ao criar APIs REST.
CherryPy
O CherryPy é outro micro-framework que se propõe a fornecer funcionalidades essenciais e sair do caminho.
Embora seja semelhante a outros micro-frameworks como o Flask, o CherryPy tem algumas diferenças:
- Contém um servidor multi-thread integrado (algo que o Flask ainda não oferece).
- O servidor web pode hospedar várias aplicações!
- Serve a sua aplicação como uma aplicação WSGI (para interagir com outras aplicações WSGI) ou um servidor HTTP simples.
- Suporte de excelência para criação de perfis e testes unitários.
- Funciona em PyPy, Jython e até Android.
O CherryPy faz tudo isto, e mais funcionalidades comuns de um framework web.
O CherryPy é para si?
O CherryPy é um concorrente sério do Flask para a construção de serviços RESTful. É um framework estabelecido, adequado para aplicações pequenas e grandes.
Sanic
A popularidade do Node e o seu modelo de programação assíncrono levaram ao surgimento de frameworks assíncronos, incluindo o Sanic.
O Sanic é fortemente inspirado no Flask, utilizando os mesmos decoradores de rota e Blueprints. O Sanic oferece E/S sem bloqueio para atingir o desempenho de uma aplicação Node. Em outras palavras, o Sanic é o Flask com suporte async/await!
Quando comparado com o CherryPy, o Sanic demonstra uma vantagem de desempenho significativa (imagine como se compara ao Flask!). Veja os resultados de um teste realizado pela DataWeave:
Como se pode observar, o CherryPy começa a falhar quando o número de conexões simultâneas excede 50 por segundo.
O Sanic é para si?
Apesar do excelente desempenho do Sanic, pode não ser a melhor escolha para o seu próximo projeto. A principal razão é a falta de bibliotecas assíncronas. A maioria das ferramentas e bibliotecas Python existentes foram escritas para CPython, sem previsão para alta simultaneidade ou operações assíncronas. Se o seu ORM favorito não suportar operações assíncronas, o objetivo de utilizar o Sanic é anulado.
Por estas razões, não iremos analisar outros frameworks assíncronos em Python.
Masonite
O Masonite é a versão Python do Laravel (um famoso framework PHP). Por que isto importa? Porque o Laravel foi construído sobre os princípios do Ruby on Rails, permitindo que programadores não-Ruby experimentem o “estilo Rails” de fazer as coisas.
Os programadores Laravel (e, em certa medida, Rails) sentir-se-ão confortáveis e rapidamente produtivos. Ao experimentar o Masonite, foi possível criar APIs REST sem dificuldades, devido à familiaridade com o Laravel.
Como um framework de pilha completa com baterias incluídas, o Masonite oferece várias funcionalidades interessantes:
- ORM ao estilo de registo ativo.
- Migrações de base de dados (que, ao contrário do Django, precisam ser criadas pelo programador).
- Um poderoso contêiner IoC para injeção de dependência.
- CLI própria (“craft”) para scaffolding e execução de tarefas.
- Suporte de excelência para testes unitários.
O maior “rival” do Masonite é o Django, sendo que a comunidade promove o framework como fácil, intuitivo e inovador. Se irá ultrapassar o Django é algo que só o tempo dirá, mas para uma discussão comparando os dois, consulte aqui e aqui.
O Masonite é para si?
O Masonite é um framework relativamente novo em comparação com o Django, sendo difícil recomendá-lo em vez deste. No entanto, se apreciar a abordagem do Rails (ou Laravel), certamente gostará do que o Masonite tem para oferecer. É ideal para criar protótipos rapidamente, com tudo pré-configurado e fácil de substituir.
Conclusão
Existe uma grande variedade de frameworks Python, de pequena a grande escala. Embora possa escolher qualquer um para um pequeno projeto, as aplicações empresariais têm requisitos específicos que nem todos os frameworks conseguem atender. Para o desenvolvimento empresarial, o Django, Zope e TurboGears são as melhores opções. Particularmente, recomendo o TurboGears.
No entanto, qualquer arquiteto qualificado pode pegar num micro-framework e implementar a sua própria arquitetura. E é isto que acontece na prática, o que explica o sucesso do Flask.
Se é um iniciante, este curso online será útil para aprender Python.
Em seguida, explore alguns dos frameworks Python especializados na criação de APIs.