Flask-RESTPlus介紹
Flask-RESTPlus是對Flask的擴展,它增加了對快速開發REST API的支持。Flask-RESTPlus中提供了大量的裝飾器和工具來描述你的API,並以文檔化的形式將這些接口展現出來(通過Swagger來實現)。
項目准備與配置
項目准備
python版本:3.6
項目路徑:
app main controller ---API層,定義API 接口; model ---Model層,定義數據表和字段類型; serializers ---序列化與反序列化層 service ---Service層,業務邏輯層; config.py ---App應用配置 __init__.py ---App初始化 __init__.py —-API 藍圖 入口 docker ---存放dockfile文件 manage.py ---App 程序運行入口 requirements.txt ---依賴包
requirements.txt:
alembic==1.6.5 aniso8601==9.0.1 attrs==21.2.0 bcrypt==3.2.0 certifi==2021.5.30 cffi==1.14.6 charset-normalizer==2.0.4 click==7.1.2 dataclasses==0.8 Flask==1.1.4 Flask-Bcrypt==0.7.1 Flask-Migrate==2.7.0 flask-restplus==0.13.0 Flask-Script==2.0.6 Flask-SQLAlchemy==2.5.1 Flask-Testing==0.8.1 greenlet==1.1.1 idna==3.2 importlib-metadata==4.6.3 itsdangerous==1.1.0 Jinja2==2.11.3 jsonschema==3.2.0 Mako==1.1.4 MarkupSafe==2.0.1 mysql-connector-python==8.0.26 pika==1.2.0 protobuf==3.17.3 pycparser==2.20 PyJWT==2.1.0 pyrsistent==0.18.0 python-dateutil==2.8.2 python-editor==1.0.4 pytz==2021.1 requests==2.26.0 six==1.16.0 SQLAlchemy==1.4.22 typing-extensions==3.10.0.0 urllib3==1.26.6 Werkzeug==0.16.0 zipp==3.5.0
項目配置
app/main/config.py
import os basedir = os.path.abspath(os.path.dirname(__file__)) class Config: SECRET_KEY = os.getenv('SECRET_KEY', 'my_precious_secret_key') DEBUG = False class DevelopmentConfig(Config): DEBUG = True # mysql配置:mysql://username:password@hostname/database # 例如:mysql://root:root@localhost:5000/flaskdb" SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'flask_boilerplate_main.db') SQLALCHEMY_TRACK_MODIFICATIONS = False class TestingConfig(Config): DEBUG = True TESTING = True SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'flask_boilerplate_test.db') PRESERVE_CONTEXT_ON_EXCEPTION = False SQLALCHEMY_TRACK_MODIFICATIONS = False class ProductionConfig(Config): DEBUG = False config_by_name = dict( dev=DevelopmentConfig, test=TestingConfig, prod=ProductionConfig ) key = Config.SECRET_KEY
app/main/__init__.py
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_bcrypt import Bcrypt from .config import config_by_name db = SQLAlchemy() flask_bcrypt = Bcrypt() def app(config_name): app = Flask(__name__) app.config.from_object(config_by_name[config_name]) db.init_app(app) flask_bcrypt.init_app(app) return app
manage.py
import os import unittest from flask_migrate import Migrate, MigrateCommand from flask_script import Manager from app.main import app, db from app import blueprint app = app(os.getenv('BOILERPLATE_ENV') or 'dev') app.register_blueprint(blueprint) app.app_context().push() manager = Manager(app) migrate = Migrate(app, db) manager.add_command('db', MigrateCommand) @manager.command def run(): app.run() @manager.command def test(): """Runs the unit tests.""" tests = unittest.TestLoader().discover('app/test', pattern='test*.py') result = unittest.TextTestRunner(verbosity=2).run(tests) if result.wasSuccessful(): return 0 return 1 if __name__ == '__main__': manager.run()
測試運行
python manage.py run
數據庫
1.、使用 init
命令創建一個遷移文件夾以使 Alembic 執行遷移。
python manage.py db init
2、使用 migrate
命令檢測 model 的更改並創建遷移腳本。這里並不會更改數據庫。
python manage.py db migrate --message '初始化數據庫'
3、使用 upgrade
命令將遷移腳本應用於數據庫。
python manage.py db upgrade
note:每次數據庫模型更改時,都執行一次 migrate
和 upgrade
命令。
其他常用命令:
去查看改變的歷史狀態;
python manage.py db history
使用manage.py可以查看更多命令:
Swagger配置
參考git配置:https://github.com/Angell1/py-workflow
最后效果: