flask design patterns
Este tutorial explica alguns dos padrões de design comuns do Flask e práticas recomendadas a serem seguidas ao projetar aplicativos da web com exemplos:
O design do aplicativo é um aspecto essencial do desenvolvimento de software. Um design de aplicativo não planejado resulta em dívidas técnicas intransponíveis. Portanto, sempre que quisermos dimensionar nosso aplicativo, não há problema em experimentar padrões de design testados ao longo do tempo.
A comunidade Flask tem muitos exemplos que podem inspirá-lo e impactar suas decisões de design quando você quiser experimentar alguns padrões para seu aplicativo. O Flask é tão não-preconceituoso e flexível que você pode querer combinar conceitos dos padrões existentes e criar um novo.
=> Visite aqui para aprender o frasco do zero
O que você aprenderá:
Padrões de design de frasco
Por exemplo, Você encontrará muitos exemplos do padrão MVC aos aplicativos de página única e ao padrão SAAS. Você nomeia o paradigma do design e ele já está lá testado por alguém na comunidade e está disponível gratuitamente para você experimentar.
Listados abaixo estão alguns dos repositórios que vale a pena conferir.
Flusk
Flusk é um exemplo que você pode usar para criar grandes aplicativos Flask que incluem SQLAlchemy, Docker e Nginx. Ele tem uma bela separação lógica para criar back-end, domínio, visualizações e modelos em suas respectivas camadas.
Ele tem excelente uso de Flask Blueprints e segue o padrão de design de fábrica. É fácil criar extensões no Flusk e ainda mais fácil colocar o aplicativo em contêiner usando o Docker. Dê uma olhada em seu código-fonte aqui .
Frasco Cookiecutter
Cookiecutter Flask é um modelo de frasco com recursos como agrupamento de ativos e minificação com pacotes da web. Possui modelos iniciais para registro / autenticação do usuário e é baseado no Bootstrap 4.
Cookiecutter é um utilitário de linha de comando para criar um projeto de pacote Python. Isso significa que, se você usar esse modelo, também poderá publicar seu aplicativo Flask como PyPI. Este projeto está em desenvolvimento ativo.
Vale a pena avaliar em esse link .
Frasco Cheio
Flask full é mais um clichê poderoso que usa Celery, MongoEngine, Signals, comandos Shell, WebSocket e eventlet. É muito bem integrado com documentos da API Swagger e documentos Sphinx.
Avalie este projeto como sua fonte. Está disponível gratuitamente aqui .
Flasky
Para criar aplicativos leves, você pode considerar o Flasky. O código-fonte do Flasky está disponível aqui . Este repositório foi criado por Miguel Grinberg, que tem mais de 25 anos de experiência em desenvolvimento web.
Ele criou o Flasky para fornecer exemplos de código para os conceitos discutidos em seu livro chamado Flask Web Development .
Qualquer que seja a estrutura ou modelo que você escolher, todos eles têm alguns recursos padrão e falam sobre eles à sua maneira. Listamos aqui alguns desses recursos e os discutimos, e os implementamos usando o Flask-Appbuilder em nosso aplicativo de amostra desta série de tutoriais.
Este tutorial discute alguns padrões mais comuns que você encontrará em quase todos os aplicativos da web hoje e é bom ter no kit de um desenvolvedor da web.
Exemplo de login do Flask
Um aplicativo da web geralmente requer que os usuários se registrem e acessem a parte restrita do aplicativo com base nos privilégios atribuídos. Os usuários têm funções baseadas em permissão. Por exemplo, um usuário público não tem permissão para criar outro usuário. No entanto, um usuário Admin tem essas permissões.
Às vezes, os aplicativos da web automatizam o registro e a criação do usuário atribuindo a eles as permissões padrão ou predefinidas.
Criar usuário offline
Vamos criar um usuário usando o comando flask fab create-user. Depois de usar este comando, você receberá prompts de linha de comando para fornecer os detalhes da conta do usuário. Dê os detalhes semelhantes aos mostrados abaixo e seu usuário é criado.
Role (Public): Username: user1 User first name: User1 User last name: Last1 Email: user1@sthwebsite.com Password: Repeat for confirmation: ## various logs 2020-06-21 13:55:01,053:INFO:flask_appbuilder.security.sqla.manager:Added user user1 User user1 created.
Observe que no final da saída do comando, o sqla.manager imprime mensagens de confirmação para a criação do usuário.
Agora acesse o aplicativo e faça o login com os dados que acabou de inserir. Se você criou o usuário no banco de dados de produção, passe esses detalhes para a pessoa para quem você criou esta conta.
Navegue para http: // localhost: 8080 / login, e você verá o formulário de login conforme mostrado abaixo.

Depois que o usuário1 faz login, o usuário pode ver a mensagem de boas-vindas.

Criar usuário online
Pode ser impossível para nós criar todos os usuários offline. Além disso, pode ser necessário mais conhecimento técnico para usar o comando flask fab create-user no ambiente de produção. Você pode obter um requisito para tirar alguma carga de trabalho de um Admin, que na maioria das vezes é encarregado da criação do usuário.
Portanto, em nosso aplicativo da web de exemplo, vamos permitir que os usuários se registrem.
Usamos o serviço reCAPTCHA do Google para evitar que agentes mal-intencionados acessem as partes restritas do aplicativo.
Primeiro, vamos registrar nosso domínio no serviço reCAPTCHA do Google e adquirir a chave SITE e a chave SECRET.
Passo 1: Instale o Flask-Mail usando o comando abaixo.
pip install Flask-Mail
Vá para https://www.google.com/recaptcha/intro/v3.html e faça login como Admin usando sua Conta do Google.
Passo 2: Escolha o tipo de reCaptcha.

Etapa 3: forneça o domínio para o qual deseja usar o reCaptcha do Google.
Além disso, adicione o host local à lista de domínios permitidos para esta chave, aceite os termos e envie-os. Você pode removê-lo mais tarde, após o desenvolvimento deste recurso.
Passo 4: Anote a SITE KEY, também conhecida como chave pública.

Etapa 5: Anote a SECRET KEY, também conhecida como chave privada.

Depois de anotar as chaves conforme mencionado acima, é melhor armazená-las em um local onde possam ser consultadas e lidas na configuração. Para este tutorial, salvamos os valores como variáveis de ambiente como SITE_KEY e SECRET_KEY.
Agora abra o config.py e atualize-o conforme mostrado abaixo.
# Will allow user self registration AUTH_USER_REGISTRATION = True# The default user self registration role AUTH_USER_REGISTRATION_ROLE = 'Public'# Config for Flask-WTF Recaptcha necessary for user registration RECAPTCHA_PUBLIC_KEY = os.environ.get('SITE_KEY', None) RECAPTCHA_PRIVATE_KEY = os.environ.get('SECRET_KEY', None) # Config for Flask-Mail necessary for user registration MAIL_PORT = 587 MAIL_USE_SSL = False MAIL_SERVER = 'smtp.gmail.com' MAIL_USE_TLS = True MAIL_USERNAME = 'sthtestmail@gmail.com' MAIL_PASSWORD = 'Passw0rdqwerty' MAIL_DEFAULT_SENDER = 'sthtestmail0@gmail.com'
Pode ser necessário ativar o acesso menos seguro à sua Conta do Google. Habilite o acesso à conta nos URLs abaixo se você ficar preso em qualquer problema relacionado ao e-mail.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Agora, na página de login, podemos ver um botão adicional de registro do usuário. Depois de clicar em registro, podemos ver muitos campos junto com o Desafio reCaptcha.

Depois de se registrar com seu e-mail e passar no desafio reCaptcha, você verá uma mensagem de confirmação, conforme mostrado abaixo.

Se o email que você forneceu durante o registro for válido, você receberá o email de ativação da conta semelhante ao mostrado na imagem abaixo.

Flask Admin
Se você leu os outros tutoriais desta série de tutoriais do Flask, notará que aproveitamos o benefício da segurança embutida que vem com o Flask-Appbuilder. As visualizações que adicionamos usando add_view_no_menu não são protegidas. No entanto, as visualizações que adicionamos com base em DataModels são protegidas automaticamente para um usuário Admin.
Alternativamente, poderíamos fazer uso do Flask-Admin, que na maioria das vezes teria alcançado um resultado semelhante. Flask-Admin também, vamos definir as visualizações de uma maneira orientada a objetos. Uma página da web no frontend representa um método em uma classe de visualização que adicionamos explicitamente à interface.
Neste tutorial, não usamos Flask-Admin. Em vez disso, tomamos o caminho de alcançar os mesmos resultados com mais velocidade e ignorando a necessidade de saber sobre a construção de segurança em torno de Login, Auths, Roles e permissões. Isso foi possível porque usamos o Flask-Appbuilder.
Tanto o Flask-Appbuilder quanto o Flask-Admin têm seus prós e contras. No caso do Flask-Admin, devemos saber que não há suposições de segurança existentes e você pode criar aplicativos com base em seu modelo de segurança. Para saber mais sobre Flask-Admin, visite aqui e passar por exemplos adequados.
Flask File Upload
Quase todos os aplicativos da web hoje em dia têm os requisitos de armazenamento e exibição de arquivos. Um padrão típico para eles é salvar os arquivos em um caminho no Servidor, com algumas informações para fazer a operação no arquivo armazenado e mantê-los em Modelos de Aplicativos e visualizações.
Vamos trabalhar em um exemplo semelhante. Vamos modificar nosso modelo de música com recursos adicionais.
No arquivo models.py, insira o código a seguir.
from flask import Markup, url_for from flask_appbuilder.models.mixins import FileColumn from flask_appbuilder.filemanager import get_file_original_name from flask_appbuilder import Model from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship class Song(Model): id = Column(Integer, primary_key=True) title = Column(String(200), nullable=False) rating = Column(Integer) album_id = Column(Integer, ForeignKey('album.id')) # for storing MP3 file of the song song_file = Column(FileColumn, nullable=False) album = relationship('Album') def __str__(self): return self.title def download(self): return Markup( ' Download ' ) def file_name(self): return get_file_original_name(str(self.song_file))
Modificamos nosso modelo Song criado anteriormente, adicionando uma nova coluna do tipo FileColumn. Além disso, adicionamos mais duas colunas que serão adicionadas ao SongsView para exibir o nome do arquivo e um link para baixar o arquivo carregado.
O método Flask url_for foi usado junto com a marcação para exibir o download como um link. Além disso, usamos o método get_file_original_name do Flask-Appbuilder, pois o nome do arquivo é armazenado concatenando-o com um UUID para evitar colisões entre os mesmos nomes de arquivo.
Modifique views.py com o código fornecido a seguir para atualizar o SongsView correspondente.
class SongsView(ModelView): datamodel = SQLAInterface(Song) label_columns = {'file_name' : 'File Name', 'download': 'Download'} list_columns = ('title', 'file_name', 'download') show_columns = ('title', 'file_name', 'download')
Na classe SongsView, mencionamos os novos rótulos que precisam ser exibidos e queremos listar apenas as colunas mencionadas na lista especificada.
Aqui você precisa se lembrar que modificamos um modelo de banco de dados adicionando uma coluna ao modelo. A tabela correspondente no banco de dados não possui esta nova coluna. Portanto, removeremos o arquivo app.db, pois estamos trabalhando no banco de dados SQLite desde o último tutorial.
Como alternativa, também podemos usar o comando flask db migrate e fazer as alterações necessárias no arquivo de versão e usar o flask db upgrade para atualizar a tabela. No entanto, a mudança que introduzimos é mínima e podemos recriar o banco de dados do aplicativo e o usuário.
Recomendamos que, na produção, considere o uso dos comandos Flask-Migrate sempre que fizer qualquer alteração no esquema de banco de dados de seu aplicativo.
Use os comandos abaixo para remover o arquivo de banco de dados e criar o usuário admin novamente.
rm app.db flask fab create-db flask fab create-admin
Agora faça login no aplicativo com as credenciais de administrador e você verá o SongsView modificado conforme mostrado na imagem abaixo.

Adicione uma música com um arquivo.

Depois de salvar o arquivo, as colunas na Visualização terão a aparência mostrada abaixo.

Observe os seguintes valores em config.py. Os arquivos carregados serão armazenados neste caminho no servidor. Para este tutorial, ele será carregado na máquina na qual estamos desenvolvendo este aplicativo de amostra.
Verifique o caminho de upload, conforme mencionado em config.py. Os arquivos são armazenados com os UUIDs, conforme mostrado abaixo.

Flask HTTPS
No que diz respeito ao desenvolvimento, podemos continuar a executar nosso aplicativo Flask sem HTTPS. Do ponto de vista da segurança, o HTTPS garante que a comunicação aconteça entre o cliente e o servidor legítimos.
Essa comunicação criptografada requer que a confiança seja estabelecida entre um cliente e um servidor, usando um certificado assinado pela CA com um par de chaves públicas e privadas. Por favor, leia mais sobre isso aqui
Neste tutorial, vamos informá-lo sobre os métodos para desenvolver sites baseados em Flask usando HTTPs durante o desenvolvimento.
A maneira mais rápida e fácil de incluir HTTPS durante o desenvolvimento é usar um adhoc ssl_context, conforme mencionado abaixo em run.py. No entanto, instale o pyopenssl usando pip no ambiente.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
Após adicionar ssl_context, ao navegar para https: // localhost: 8080 /, você receberá um aviso levantando dúvidas sobre a validade do certificado que está sendo utilizado nesta comunicação. Além disso, a navegação para http: // localhost: 8080 / não funcionará mais.
Portanto, essa abordagem é um pouco complicada e exigirá que você continue aceitando essa solicitação sempre que reiniciar o servidor de desenvolvimento.
Você precisa clicar em acesso não seguro para continuar trabalhando, conforme mostrado abaixo.

Como alternativa, para desenvolver com os recursos https, podemos passar o caminho para o certificado e digitar um Python Tuple para o parâmetro ssl_context no método de execução. No entanto, para adotar essa abordagem, você terá que gerar um certificado autoassinado e uma chave usando o comando abaixo.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Dê valores apropriados para as perguntas feitas.

Deixamos todos os valores padrão. Agora pare o servidor de desenvolvimento e passe o certificado do caminho e o caminho da chave conforme mostrado abaixo.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
Essa abordagem também é semelhante ao método anterior de usar Adhoc ssl_context. No entanto, neste caso, os detalhes persistem por mais tempo. Mencionamos 365 dias. Você pode especificar o prazo de validade para os dias que você precisa. Além disso, esses arquivos podem ser compartilhados com os outros membros da equipe se você estiver desenvolvendo em equipe.
No ambiente de produção, os certificados são emitidos pela CA e Miguel Grinberg discute alguns casos de uso aqui . Recomendamos que você leia mais detalhes nessa página.
Conclusão
Neste tutorial, discutimos alguns padrões que os desenvolvedores da web seguem ao desenvolver recursos relacionados ao Flask Login, Flask Admin, Flask File Upload e Flask HTTPS. Fornecemos exemplos de código e os leitores também podem tentar.
Em nosso próximo tutorial, cobriremos os conceitos de extensão do Flask e veremos como criar recursos baseados na API REST. Além disso, discutiremos como podemos usar a API do Twitter dentro do Flask.
qual é a sua abordagem ao testar aplicativos móveis
=> Explore a série de treinamento Flask aqui
Leitura recomendada
- Padrões de projeto em Java: Singleton, Factory e Builder
- Tutorial do Python Flask - introdução ao Flask para iniciantes
- Tutorial da API Flask com exemplo | Estendendo Flask com APIs
- Flask App e Flask Layout de projeto com Blueprint e Bootstrap
- Django Vs Flask Vs Node: Qual Framework Selecionar
- As 31 principais perguntas populares da entrevista do frasco de Python com respostas
- Dez principais ferramentas de design de banco de dados para construir modelos de dados complexos
- As 11 principais tendências de design de UI / UX: O que esperar em 2021 e além