引言
在我的工作中,我已经使用Flask-Potion一段时间了,该框架的主要优点是:与SQLAlchemy模型的非常方便的集成,自动生成Crud端点,存在药水客户端 (如果编写需要在另一个API中使用的API服务,则非常方便)服务)。
我注意到俄语中的烧瓶药水几乎没有,但是我认为这个框架对于某些人来说似乎很有趣。
我决定写几篇关于基于Flask-Potion为Furfur库创建控制系统的文章,而不是简单地阅读有关该框架的文章。
该系统应该能够执行以下操作:
- 存储有关书籍的信息(isbn,标题,描述,作者等)
- 存储用户信息(读者和图书馆员)
- 在图书馆发行一本书有一定的期限,可以延期
在此系统中,我们将使用以下工具:
- PostgreSQL的
- Flask,Flask-SQLAlchemy,Flask-JWT,Flask-Potion,Flask-Migrate
准备工作
骷髅
为了不自己收集项目的框架,我们将使用Valefor cookiecutter-template,该模板包括上述所有依赖项,甚至更多。
cookiecutter gh:lemegetonx/valefor
该模板包括两个应用程序:
- 应用是最主要的。 它包含用于jwt的处理函数,用于药水资源和sqlalchemy模型的mixin类,以及带有应用程序配置的软件包。
- 用户-模板的开头,仅包含用户模型。
依赖安装
该模板使用诗歌来解决依赖关系,但是最近pip还支持pyproject.toml ,因此选择是您自己的。 我将利用诗歌。
poetry install
构型
为了简化配置,模板使用了西提里(sitri)库。 我们将需要稍微修改Sitri对象的设置。
- 更改app / config / provider.py 。 我们将用YamlCredentialProvider替换SystemCredentialProvider ,以便从credential.yaml文件获取第三方系统的授权数据,而不会将其添加到提交中:
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"), )
简而言之,PS可以更轻松地阅读文档中实际发生的事情,简而言之,现在我们决定要从哪里获取用于配置和授权的数据。
- 由于我们实质上是使用相同的提供程序,因此最好用database.py中的点替换get_credential调用中键中的下划线。
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)
因此, config.yaml文件已经在模板中,但是credential.yaml应该由您自己编写。 在现实生活中,必须将此类文件添加到.gitignore中,但是我会将credential.yaml模板添加到存储库中,以便任何进入该项目的人都可以理解其结构。
基本credential.yaml :
db: name: furfur_db host: localhost port: 5432 user: password: passwd name: admin
资料库
我们准备工作的下一步是部署DBMS,在本例中为PostgreSQL。 为了方便起见,我将创建一个stack.yaml文件,其中将用所需的数据描述postgres容器的启动。
version: '3.1' services: db: image: postgres restart: always environment: POSTGRES_PASSWORD: passwd POSTGRES_USER: admin POSTGRES_DB: furfur_db ports: - 5432:5432
如前所述,valefor模板包括JWT(处理程序)正常工作所必需的基本用户模型,因此准备数据库的最后一步是迁移(创建用户表)。
作为项目的根,我们执行以下命令:
export FLASK_APP=furfur.app flask db init flask db migrate flask db upgrade
有了数据库的准备以及我们系统的一般基础,一切都完成了。
接下来是什么?
在下一部分中,我们将讨论如何组织一个简单的角色系统和JWT身份验证。
项目资源库: https : //github.com/Egnod/furfur
此部分中说明的所有内容: https : //github.com/Egnod/furfur/releases/tag/0.0.2