第一章:项目结构篇

本项目主要技术点:

  • rest api
  • JWT认证
  • 基于flask_sqlalchemy的用户权限五表设计
  • 基于flasgger的swagger文档实践
  • supervisor+uwsgi+Flask项目部署实践

项目结构

在这里插入图片描述

conf: supervisor和uwsgi的配置文件,后边在项目部署篇会详细讲解

src:项目源码目录

  • app:项目应用目录
    • api:路由
    • forms:表单验证
    • models:数据库模型
    • utils:通用模块
  • migrations:数据库迁移目录:自动生成
  • tests:测试文件

manage.py:服务启动、数据库迁移、数据库初始化

服务应用配置

项目全局配置在app模块中的config.py,详细配置说明看下面注释即可:

# 系统配置
from datetime import timedelta

APP_NAME = 'XXX服务'

# -------------------数据库配置-------------------
# 数据库配置:sqlite
# DB_URI = 'sqlite:///../flask_api.db'

# 数据库配置:mysql
USER = 'root'
PASSWORD = '123456'
HOST = 'localhost'
DB_NAME = 'flask_api'
DB_URI = f'mysql+pymysql://{USER}:{PASSWORD}@{HOST}/{DB_NAME}?charset=utf8'

SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False
# -------------------数据库配置-------------------

# -------------------Swagger-------------------
SWAGGER_CONFIG = {
    "title": f"{APP_NAME} API",
    "description": f"欢迎使用 {APP_NAME}",
    "termsOfService": "",
    "headers": [
    ],
    "specs": [
        {
            "endpoint": 'api',
            "route": '/api.json',
            "rule_filter": lambda rule: True,  # all in
            "model_filter": lambda tag: True,  # all in
        }
    ],
    "static_url_path": "/flasgger_static",
    # "static_folder": "static",  # must be set by user
    "swagger_ui": True,
    "specs_route": "/apidocs/",
    "securityDefinitions": {
        "api_key": {
            "type": "apiKey",
            "in": "header",
            # jwt认证
            "name": "Authorization"
        }
    },
}
# -------------------Swagger-------------------

# -------------------JWT-------------------
SECRET_KEY = "\x17wQ;\x0b\xbc4lj\xc2;$\xfc\x96$\xbc\x9e<\x07\x93\x97\x85S\x89G&\xfe\x97\xf8\x85Ip"
JWT_SECRET_KEY = SECRET_KEY
JWT_ACCESS_TOKEN_EXPIRES = timedelta(hours=1)  # 过期时间
# -------------------JWT-------------------

数据库迁移

运行sh init_db.sh进行数据库迁移,init_db.sh内容如下:

其中init_db为自定义命令:初始化超级管理员用户、初始化权限、初始化普通用户角色

# 数据库迁移
python manage.py db init
python manage.py db migrate
python manage.py db upgrade

#初始化数据库
python manage.py init_db

创建app

app中__init__.py中创建create_app函数,进行app的初始化配置,包括全局配置、swagger文档、跨域、全局异常、JWT、初始化数据库、蓝图注册等:

def create_app():
    from . import config
    # 创建Flask实例
    app = Flask(__name__)
    # 配置项
    app.config.from_object(config)
    # swagger 文档
    Swagger(app, config=config.SWAGGER_CONFIG)
    # 跨域支持
    CORS(app)
    # 初始化全局异常
    init_exception(app)
    # 初始化JWT
    init_jwt(app)
    # 初始化数据库
    init_db(app)
    # 注册蓝图
    register_blueprints(app)
    return app

manage.py

from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager, Server

from app import create_app
from app.models.base import db

app = create_app()

manager = Manager(app)
migrate = Migrate(app, db)

@manager.command
def init_db():
    ...


manager.add_command("runserver", Server(use_debugger=True))
# 数据库迁移
# 1. python manage.py db init
# 2. python manage.py db migrate
# 3. python manage.py db upgrade
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    manager.run()

服务启动:

python manage.py runserver

访问http://127.0.0.1:5000/apidocs/可测试项目的所有api文档:

在这里插入图片描述

项目源码地址会附在专栏最后一章,欢迎继续阅读本专栏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

llc的足迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值