Sistema de controle de biblioteca na Flask-Potion, Parte 0: preparando tudo que você precisa

1. Introdução


No meu trabalho, já uso o Flask-Potion há algum tempo, uma estrutura cujas principais vantagens são: integração muito conveniente com modelos SQLAlchemy, geração automática de terminais brutos, presença de um cliente de poção (muito conveniente se você escrever um serviço de API que precisará usar em outro serviço).


Notei que não há quase nada sobre a poção para frascos em russo, mas acho que essa estrutura pode parecer interessante para alguns.


Em vez de um artigo de revisão simples sobre essa estrutura, decidi escrever vários artigos sobre a criação de um sistema de controle para a biblioteca Furfur baseada em Flask-Potion.


Este sistema deve poder fazer o seguinte:


  • Armazene informações sobre livros (isbn, título, descrição, autor, etc.)
  • Armazenar informações do usuário (leitores e bibliotecários)
  • Emitir um livro da biblioteca por um determinado período com a possibilidade de extensão

Neste sistema, usaremos as seguintes ferramentas:


  • PostgreSQL
  • Frasco, Frasco-SQLAlquimia, Frasco-JWT, Frasco-Poção, Frasco-Migração

Preparação


Esqueleto


Para não coletarmos o esqueleto do projeto, usaremos o modelo de corte de vale da Valefor, que inclui todas as dependências acima e muito mais.


cookiecutter gh:lemegetonx/valefor 

Este modelo inclui dois aplicativos:


  1. aplicativo é a principal coisa. Ele contém funções de manipulador para jwt, classes mixin para recursos de poção e modelos sqlalchemy, além de um pacote com configurações para o aplicativo.
  2. usuário - no início do modelo, contém apenas o modelo do usuário.

Instalação de Dependências


O modelo usa poesia para resolver dependências, mas recentemente o pip também suporta pyproject.toml , portanto a escolha é sua. Vou tirar proveito da poesia.


 poetry install 

Configuração


Para configuração simplificada, o modelo usa a biblioteca sitri. Precisamos modificar um pouco a configuração do objeto Sitri.


  1. Mude app / config / provider.py . Substituiremos SystemCredentialProvider por YamlCredentialProvider para que os dados de autorização para sistemas de terceiros sejam obtidos do arquivo credential.yaml , que não adicionaremos às confirmações:

 from sitri import Sitri from sitri.contrib.yaml import YamlConfigProvider, YamlCredentialProvider configuration = Sitri( config_provider=YamlConfigProvider(yaml_path="./config.yaml"), credential_provider=YamlCredentialProvider(yaml_path="./credential.yaml"), ) 

O PS mais sobre o que realmente está acontecendo aqui é mais fácil de ler na documentação , em suma, agora apenas decidimos de onde obteremos os dados para configuração e autorização.


  1. Como criamos essencialmente os mesmos provedores, é melhor substituir os sublinhados nas chaves na chamada get_credential por pontos em database.py .

 DB_NAME = configuration.get_credential("db.name", path_mode=True) DB_HOST = configuration.get_credential("db.host", path_mode=True) DB_PASSWORD = configuration.get_credential("db.user.password", path_mode=True) DB_PORT = configuration.get_credential("db.port", path_mode=True) DB_USER = configuration.get_credential("db.user.name", path_mode=True) 

Portanto, o arquivo config.yamlestava no modelo, mas credential.yaml deve ser escrito por você. Na vida real, esses arquivos são necessariamente adicionados ao .gitignore, mas adicionarei o modelo credential.yaml ao repositório, para que sua estrutura seja compreensível para quem entra no projeto.


Credential.yaml base:


 db: name: furfur_db host: localhost port: 5432 user: password: passwd name: admin 

Banco de Dados


O próximo estágio de nossa preparação é a implantação do DBMS, neste caso o PostgreSQL. Por conveniência, criarei um arquivo stack.yaml onde descreverei o lançamento do contêiner do postgres com os dados de que precisamos.


 version: '3.1' services: db: image: postgres restart: always environment: POSTGRES_PASSWORD: passwd POSTGRES_USER: admin POSTGRES_DB: furfur_db ports: - 5432:5432 

Como mencionado anteriormente, o modelo valefor inclui o modelo básico de usuário necessário para o funcionamento do JWT (manipuladores); portanto, a etapa final na preparação do banco de dados é a migração (criação de uma tabela de usuário).


Estando na raiz do projeto, executamos os seguintes comandos:


 export FLASK_APP=furfur.app flask db init flask db migrate flask db upgrade 

Tudo, com a preparação do banco de dados, bem como a base geral do nosso sistema, estamos prontos.


O que vem a seguir?


Na próxima parte, falaremos sobre como organizar um sistema de funções simples e autenticação JWT.


Repositório do projeto: https://github.com/Egnod/furfur
Tudo o que é declarado nesta parte: https://github.com/Egnod/furfur/releases/tag/0.0.2

Source: https://habr.com/ru/post/pt472018/


All Articles