flask一项目布局

时间:2023-02-21 16:57:42
# 文件夹 ->
# 文件 -

# 项目名称
project
 # 公共api
 -> api
 # orm 迁移目录
 -> migrations
 # 视图
 -> views
  # flask 对象
  - __init__.py
 # 配置
 - settings.py
 # 启动文件
 - manage.py
 # 模型文件
 - models.py

正常操纵是直接在视图中定义flask对象在视图中使用。这种方式,在测试过程中使用即可。实际项目中,一般使用蓝图,通过蓝图为每一个视图文件服务。一般根据模块拆分。相比较django而言flask拥有更灵活的配置和使用方式。这意味着你要增加很多扩展,这些扩展可能没有类似djangorestframework那样的扩展好用。但是,这就是 flask

以上,项目拆分是小型项目中拆分,如果更大型项目还可以拆分 model文件。

flask对象

views/__init__.py。创建 flask 对象 加载配置、数据库并通过蓝图映射到各个视图文件中。

from flask import Flask
from flask_migrate import Migrate

from models import db
from views.users import user
from views.articles import article

migrate = Migrate()


def create_app(config):
    app = Flask(__name__)
    # 加载配置
    app.config.from_object(config)
    # 数据库
    db.init_app(app)
    migrate.init_app(app, db)
    # 蓝图
    app.register_blueprint(user, url_prefix='/v1/api/users')
    app.register_blueprint(article, url_prefix='/v1/api/articles')
    return app

启动文件

启动文件将app对象最终启动,如果使用uwsgi或者gunicorn部署具体参照官网。

from views import create_app

from settings import Dev, Product

app = create_app(Dev)

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

配置文件

flask所有配置统一放到配置文件中。

import datetime
import os


class Config:
    DEBUG = True
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    # SQLALCHEMY_DATABASE_URI = 'mysql://root:hello2022.hk@112.124.23.96:3306/wu_zhi'
    SQLALCHEMY_DATABASE_URI = 'mysql://root:hello_world@192.168.0.105:3306/wu_zhi'
    # SQLALCHEMY_DATABASE_URI = 'mysql://root:hello2022.hk@112.124.23.96:3306/wu_zhi'
    # 动态追踪设置
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # token 有效时间
    AUTH_TOKEN_TIME = datetime.timedelta(days=7)
    # 令牌
    SECRET = 'hello.FreeDom.2021'
    # 全局文件大小
    MAX_CONTENT_LENGTH = 10 * 1024 * 1024
    # 上传 图片 后缀限制
    UPLOAD_FOLDER = os.path.join(BASE_DIR, 'static', 'head')
    UPLOAD_FILE_SUFFIX = ('.jpg', '.png', 'jpeg')


class Dev(Config):
    pass


class Product(Config):
    DEBUG = False
    pass