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

最后效果:

 

 

 

  

 

posted @ 2021-08-15 19:26  -零  阅读(812)  评论(0编辑  收藏  举报