Home  >  Plataformas

5 frameworks on-line de Python com recursos parrudos para usar

Por que criar suas próprias credenciais de usuário e outros componentes de estoque? Essas soluções cobrem todas as bases

Mônica Wanderley

14/12/2020 às 11h00

Foto: Adobe Stock

Quando você cria um back-end para um site ou serviço, mesmo um que pareça modesto à primeira vista, pode rapidamente descobrir que é tudo menos isso. Mesmo um site “simples” acaba sendo uma colmeia de complexidade. Gerenciamento de usuários, design de dados, envio de formulários, segurança - implementar tudo isso manualmente se torna tedioso.  

Para aqueles grandes projetos da web, é melhor recorrer a uma estrutura que vem com baterias (e carregadores) incluídos. Aqui estão cinco web frameworks pesadas para Python que vêm com tudo que você precisa para construir aplicativos de web robustos e muito mais. 

1. CubicWeb 

CubicWeb se apresenta como "uma estrutura de aplicativo web semântica que favorece a reutilização e o design orientado a objetos". É um sistema intrigante - conforme observado por Rick Grehan quando o analisou para a InfoWorld em 2011 - que enfatiza o uso de abstrações e blocos de construção reutilizáveis de código chamados de "cubos". Na verdade, CubicWeb pode ser muito abstrato ou idiossincrático para alguns desenvolvedores, e sua velocidade de desenvolvimento e conjunto de recursos atrasam outros frameworks. 

Cubos são componentes de software que apresentam um esquema (modelo de dados), entidades (lógica de programação) e visualizações. Ao montar vários cubos, cada um executando sua própria tarefa, você pode compor aplicativos de software reutilizando seu próprio código e o código de outros. 

Em resumo, o CubicWeb fornece uma estrutura básica usada por cada aplicativo da web: um “repositório” para conexões de dados e armazenamento; um “mecanismo da web” para solicitações/respostas HTTP básicas e ações CRUD; e um esquema para modelagem de dados. Tudo isso é descrito nas definições de classe do Python. 

Para configurar e gerenciar instâncias do CubicWeb, você utiliza uma ferramenta de linha de comando semelhante à usada para Django. Um sistema de modelos integrado permite gerar saída HTML de maneira programática. Você também pode usar um cubo que fornece ferramentas para interfaces de usuário da web, como a estrutura HTML Bootstrap

Embora o CubicWeb suporte Python 3 (desde a versão 3.23), ele não parece usar a funcionalidade assíncrona nativa do Python 3. Uma forma indireta de incluir async seria usar o módulo cubicweb.pyramid para usar a estrutura Pyramid como o servidor da web e desenhar em uma bifurcação da Pyramid que usa construções async. Também é possível realizar tarefas de forma assíncrona com o cubo cubicweb-worker. Mas qualquer coisa mais direta parece fora de alcance por enquanto. 

Para buscar ou manipular dados persistentes em um aplicativo CubicWeb, você usa Relation Query Language (RQL), que emprega uma sintaxe vagamente semelhante a SQL, mas é padronizada após o SparQL do W3C. A justificativa do CubicWeb para isso é, novamente, abstração:a RQL fornece uma rota altamente desacoplada para interrelacionar várias fontes de dados. 

Como o CubicWeb tem muitas dependências, é melhor usar um sistema de gerenciamento de pacotes (pip) para buscar todas elas. Você também pode ter que realizar alguns ajustes manuais no ambiente local. Isso está em contraste com outras estruturas onde executar o pip ou mover o código da estrutura em uma subpasta de outro projeto é tudo o que é necessário. Ou você pode usar um contêiner do Docker para fazer as coisas funcionarem. 

O CubicWeb se refere à sua extensa documentação como "o livro". Os autores do livro se deram ao trabalho de explicar a abordagem incomum do CubicWeb, demonstrar como construir alguns aplicativos básicos, incluir referências de API e, em geral, sair de seu caminho para ser específico. 

CubicWeb permanece em desenvolvimento ativo, embora lento. Planos para o CubicWeb 4.0 foram arquitetados desde 2012, mas nenhum cronograma foi oferecido para entregá-lo. 

2. Django 

Desde que o Django apareceu pela primeira vez, ele se tornou uma das estruturas Python mais amplamente implantadas para a criação de aplicativos da web. O Django vem com quase todas as baterias de que você precisa, tornando-o mais adequado para construir grandes aplicativos. 

O framework passou muitos anos estagnado na versão 1.x e, quando o Django 2.0 chegou no final de 2017, ele abandonou a compatibilidade com o Python 2 em favor do Python 3.4 e superior. Django 3.0, lançado em dezembro de 2019, requer Python 3.6 ou superior e adiciona suporte para o novo padrão ASGI assíncrono para aplicativos da web Python. 

Uma parte fundamental do apelo do Django é sua velocidade de implantação. Como o Django conta com vários componentes necessários para desenvolver o aplicativo da web comum, você pode começar a trabalhar rapidamente. Roteamento, análise de URL, conectividade de banco de dados, incluindo um ORM (mapeador relacional de objeto), validação de formulário, proteções contra ataques e modelos estão todos integrados. 

Você encontrará blocos de construção para os cenários de aplicativos da web mais comuns. O gerenciamento de usuários, por exemplo, é encontrado na maioria dos sites, então o Django o oferece como um elemento padrão. Em vez de ter que criar seu próprio sistema para rastrear contas de usuários, sessões, senhas, logins/logouts, permissões de administrador e assim por diante, o Django fornece esses recursos nativamente. Eles podem ser usados no estado em que se encontram ou ampliados para abranger novos casos de uso com trabalho mínimo. 

Ele tem padrões confiáveis e seguros, que ajudam a proteger seu aplicativo da web de ataques. Quando você coloca uma variável em um modelo de página, como uma string com HTML ou JavaScript, o conteúdo não é renderizado literalmente, a menos que você designe explicitamente a instância da variável como segura. Isso por si só elimina muitos problemas comuns de script entre sites. Se você deseja realizar a validação do formulário, pode usar tudo, desde a proteção CSRF simples até mecanismos de validação campo a campo completos que retornam feedback de erro detalhado. 

Um conjunto de recursos tão rico e amplo quanto o do Django não seria muito bom sem uma documentação robusta para acompanhá-lo. A documentação do Django examina cada aspecto do framework de vários ângulos. Trabalhar com Python 3 ou outros sabores da linguagem, fazer a segurança certa, implementar componentes de aplicativo da web comuns (como sessões ou paginação), gerar mapas de site - tudo isso está coberto. As APIs para cada camada do aplicativo - modelo, visualização e template - também são descritas em detalhes. 

Com grande poder, entretanto, vem grande complexidade. Os aplicativos Django têm a reputação de serem pesados, repletos de muitas partes móveis. Mesmo um aplicativo Django simples requer uma boa quantidade de configuração para ser executado. Se seu objetivo é fazer pouco mais do que configurar alguns pontos de extremidade REST simples, o Django certamente é um exagero. 

Ele também tem suas peculiaridades. Por exemplo, os templates de página não podem usar funções (callables). Exemplo: Você pode passar {{user.name}} como um componente em um template, mas não {{user.get_name ()}}.

É uma das maneiras pelas quais o Django garante que os modelos não atirem inadvertidamente no seu pé, mas essas restrições podem ser chocantes se você não estiver preparado para elas. Embora existam soluções alternativas, elas tendem a prejudicar o desempenho. 

A partir da versão 3.0, o Django adicionou suporte para visualizações assíncronas. Infelizmente, ainda não há suporte para assíncronos em outras partes da pilha do Django, como o ORM. Mas você pode implantar o Django usando ASGI para aproveitar ao máximo as visualizações assíncronas. 

3. Web2py 

No mundo da programação Ruby, Ruby on Rails é de fato o framework mais utilizado. Massimo Di Pierro, Professor de Ciência da Computação da DePaul University, foi inspirado pelo ‘Rails’ para criar um framework web em Python que fosse igualmente fácil de configurar e usar. O resultado é o Web2py

A maior atratividade do Web2py é seu ambiente de desenvolvimento integrado. Ao configurar uma instância do Web2py, você recebe uma interface da web, essencialmente um editor de aplicativos Python on-line, onde é possível configurar os componentes do aplicativo. Isso normalmente significa criar modelos, visualizações e controladores, cada um descrito por meio de módulos Python ou modelos HTML. Alguns aplicativos de exemplo vêm com o Web2py pronto para uso. Você pode separá-los para ver como funcionam ou aproveitá-los como modelos iniciais para criar seus próprios aplicativos. 

Os desenvolvedores normalmente implantam o Web2py baixando seu código-fonte e construindo sobre ele. Mas para usuários menos técnicos no Windows ou MacOS, os criadores do Web2py oferecem versões que são essencialmente servidores autônomos. Baixe, descompacte e execute uma dessas versões, e você terá um servidor da web local com uma cópia pré-configurada do Web2py integrado. Esta é uma boa maneira de criar um aplicativo Web2py, que pode então ser implantado em outro lugar, conforme necessário. 

A interface da web do Web2py foi construída com Bootstrap 4, por isso é fácil para os olhos e fácil de navegar. O editor no navegador não é um substituto para um IDE completo, mas é equipado com ajudas úteis como numeração de linha e destaque de sintaxe Python (incluindo recuo automático). Também está incluída uma interface rápida da web para o shell Python, para que você possa interagir com o Web2py a partir da linha de comando - uma bela concessão para especialistas. 

O sistema de abstração de dados usado no Web2py funciona um pouco diferente do ORM do Django e outros ORMs inspirados por ele (como o Peewee). Esses sistemas usam classes Python para definir modelos, enquanto Web2py usa funções construtoras como define_table
para instanciar modelos. As diferenças provavelmente serão chocantes
apenas se você estiver acostumado com o outro jeito; eles não devem
intimidar os recém-chegados. Provavelmente, você não terá nenhum
problema em vincular o Web2py a um provedor de dados, já que ele se
comunica com quase todos os principais bancos de dados existentes. 

Uma função relacionada ao banco de dados verdadeiramente útil no Web2py é a capacidade de gerar um diagrama dos modelos, permitindo que você visualize como seus modelos se relacionam entre si. No entanto, você precisará instalar a biblioteca PyGraphviz para habilitar esse recurso. 

Web2py ornece muitos outros componentes de nível profissional: funções de internacionalização, vários métodos de cache, controle de acesso e autorização e até mesmo efeitos de front-end (por exemplo, um selecionador de data em formulários) por meio de suporte integrado para jQuery e AJAX.

Ganchos para middleware externo e interno também estão incluídos, embora você não tenha permissão para usar middleware para substituir funções centrais do Web2py. No entanto, ainda não há uso explícito da funcionalidade assíncrona do Python no Web2py, embora exista um agendador para lidar com tarefas de longa duração. 

Não é de admirar que a documentação do Web2py seja referida como “o livro”. Primeiro, ele cobre uma quantidade impressionante de material em Web2py, Python e os ambientes de implantação usados para ambos. Em segundo lugar, é escrito em um estilo narrativo altamente acessível. Terceiro, ele fala detalhadamente sobre cenários comuns de construção de aplicativos. Há um capítulo inteiro, por exemplo, sobre como usar jQuery para construir aplicativos AJAX

4. Weppy 

O Weppy parece uma marca intermediária entre a simplicidade mínima do Flask e a integridade do Django. Enquanto o desenvolvimento de um aplicativo Weppy tem a simplicidade do Flash, o Weppy vem com muitos recursos encontrados no Django, como camadas de dados e autenticação. Portanto, Weppy é adequado para aplicativos que variam de extremamente simples a modestamente sofisticados. 

À primeira vista, o código Weppy se parece muito com o código Flask ou o código Bottle. Poucas instruções são necessárias para colocar em funcionamento um site básico de rota única. As rotas podem ser descritas por meio de decoradores de função (a maneira mais fácil) ou programaticamente, e a sintaxe para fazer isso segue de perto o Flask/Bottle. A modelagem funciona quase da mesma forma, com exceção de pequenas variações na sintaxe. 

O Weppy contrasta com essas estruturas menores, incluindo alguns recursos que incorporam apenas como plug-ins ou add-ons. Por exemplo, nem o Flask nem o Bottle têm um ORM integrado ou um sistema de gerenciamento de dados. O Weppy inclui um ORM, embora baseado no projeto pyDAL em vez do muito mais popular SQLAlchemy. O Weppy ainda oferece suporte a migrações de esquema, que o Django oferece como parte de seu ORM (o sistema de migração do Django também é muito mais automatizado).

Embora ele tenha um mecanismo de extensão, a lista de complementos oficialmente aprovados é minúscula, muito menor do que o catálogo de extensões do Flash. 

Frameworks mais leves como o Weppy são frequentemente usados para construir APIs RESTful, e o Weppy vem equipado com funções convenientes para esse propósito. Coloque um decorador @service em uma rota, e os dados retornados são formatados automaticamente em JSON ou XML à sua escolha. 

O framework inclui outros recursos que parecem mais alinhados com uma estrutura maior, mas são implementados sem volume. Os exemplos incluem mecanismos de validação de dados, tratamento de formulários, cache de resposta e validação de usuário.

Em todos esses casos, o Weppy adota uma abordagem “apenas o suficiente”. Os recursos fornecidos não são tão completos quanto você pode encontrar no Django e outras estruturas pesadas, mas um desenvolvedor não precisa investir muito trabalho para torná-los úteis e eles sempre podem ser estendidos após o fato. 

Outro recurso de estrutura de peso encontrado no Weppy é o suporte à internacionalização. Strings em modelos podem ser traduzidos de acordo com arquivos de localidade fornecidos com o aplicativo, que são dicionários Python simples.

A escolha da linguagem também pode ser definida analisando a solicitação do navegador (ou seja, o cabeçalho HTTP Accept-Language) ou vinculando uma tradução a uma rota específica. 

A documentação do Weppy tem o mesmo sabor da própria estrutura. É limpo, legível e escrito para ser consumido por humanos. Além do exemplo usual “hello world”, ele inclui um bom tutorial que permite a você criar um sistema de microblog como um projeto inicial. 

Os planos de longo prazo para Weppy incluem suporte assíncrono e soquetes como entidades de baixo nível e primeira classe. Os desenvolvedores do Weppy planejam introduzir esses recursos na versão 2.0 e, em seguida, exigir o Python 3.7 ou superior para todas as versões futuras do Weppy. 

5. Zope 

O Zope não é para APIs RESTful simples (por Bottle ou Flask) ou mesmo sites básicos com interatividade (como o Django). Em vez disso, o Zope foi criado para ser uma pilha de servidor de aplicativos de nível empresarial completo, semelhante às ofertas de servidor para Java.

A documentação descreve a estrutura como “mais útil para desenvolvedores de componentes, integradores e designers da web”. Um dos principais produtos de terceiros, o Plone CMS, usa o Zope como seu substrato e serve como o principal condutor do desenvolvimento contínuo do Zope. 

Ele funciona pegando solicitações da web, combinando os parâmetros da solicitação contra um banco de dados de objetos internos (ZODB), e executando aquele objeto usando os parâmetros GET ou POST da solicitação. Tudo o que volta do objeto é devolvido ao cliente.

O Zope usa este sistema de objeto de banco de dados para simplificar tarefas como atribuição de permissões de objetos granulares, fornecendo hierarquias de herança para objetos e manuseio de transações e rollbacks para objetos de banco de dados. 

Por causa de seu tamanho e complexidade, a instalação requer algum trabalho; não é uma questão de simplesmente descompactar o código-fonte em uma subpasta do projeto. O Zope usa uma ferramenta de configuração especializada, zc.buildout, que instala uma cópia da distribuição do código-fonte do Zope de acordo com um arquivo de configuração. Qualquer um que usa o sistema de magament do pacote Python vai recuar. 

Quando você inicia o Zope e se conecta ao servidor, você será saudado com uma interface de usuário da web, onde você pode criar e editar objetos ZODB. Os objetos assumem uma das três funções básicas - conteúdo, lógica e apresentação - e podem consistir em documentos (basicamente, qualquer arquivo com um tipo MIME), scripts Python e modelos HTML. 

Os modelos podem ser manipulados usando o novo e mais flexível sistema Zope Page Templates (ZPT), ou o sistema de marcação DTML mais antigo e básico. O ZPT usa propriedades dentro de tags HTML para indicar onde colocar os dados, tornando mais fácil criar modelos usando ferramentas HTML convencionais. Mas a sintaxe ZPT leva algum tempo para se acostumar. 

Uma das vantagens que o Zope afirma para sua metodologia orientada a objetos é que cada ação no sistema, não importa em que tipo de objeto ela atue, é encapsulada por uma transação. Assim, se você deletar um arquivo armazenado no banco de dados do Zope ou fazer uma mudança destrutiva em um pedaço de código, você só precisa reverter a ação que o executou. 

A desvantagem da abordagem do Zope é que é difícil usar ferramentas modernas de controle de origem como o Git em tal base de código, e isso significa que você está colocando os dados à mercê das ferramentas de banco de dados personalizadas do Zope.

Observe que você pode conectar um banco de dados externo como MySQL a um aplicativo Zope, mas isso é estritamente para hospedar dados do aplicativo, não para substituir o ZODB. 

Outra desvantagem do Zope, pelo menos em sua forma atual, é a falta de suporte direto para a sintaxe assíncrona do Python. No entanto, o pacote zc.async permite distribuir tarefas entre máquinas e sincronizá-las em uma instância ZODB. 

Tags