Python Flask-RESTPlus 實踐

 

 

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

最後效果:

 

 

 

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章