Flask 不像 Django,在创建项目后会有基本目录结构,Flask 需要根据自己的目录规划,来建立整体的结构,笔者组织整理了项目结构如下。
- /app 应用包
- /api 接口包
- /config 配置包
- /lib 工具包
- enums.py 枚举模块
- exception.py 异常处理模块
- red_print.py 红图模块
- token.py 令牌模块
- schema.py 视图结构模块
- /model 模型包
- /patch 补丁包
- /service 业务包
- /static 静态资源目录
- /template 模板目录
- /validator 校验包
- /log 日志目录
- .flaskenv Flask环境变量文件
- .env 专属环境变量文件
- gconfig.py gunicorn配置
- Pipfile Pipenv依赖配置
- starter.py 启动文件
这里主要讲述下 Flask 的启动方式,官方文档使用的是 Flask-Cli 这一内置的命令行工具。
在之前有 Flask-Script 代替 Flask-Cli 的工作,并且很多项目目前也效仿如此,但 Flask 官方引入了 Click 提供指令支持,并且通过 flask-Cli 已经支持了一些指令比如最常用的flask run
用于启动项目。
flask --help
"""
Commands:
db Perform database migrations.
routes Show the routes for the app.
run Run a development server.
shell Run a shell in the app context.
"""
Flask-Script 最大的作用是搭配 Flask-Migrate 进行数据库的迁移,现在有了 Flask-Cli 我们同样也可以这么做。
flask db init
flask db migrate
flask db upgrade
Flask-Cli 还可以通过 @app.cli.command()
来自定义指令,通过 @click.option()
增加指令参数,说到这里没有理由在重新用回 Flask-Script 了吧。
fLask run
需要指定环境变量,这对不同环境开发来讲不是很方便,此时 python-dotenv 很好的解决了这一问题,这一依赖在上一节中已经安装。
python-dotenv 会自动装配项目根目录下的 .env
和 .flaskenv
文件,且 .env
的优先级会比 .flaskenv
的优先级更高。当然我们也可以自己在 app 载入的时候指定所要加载的环境变量文件的名称,例如:
load_dotenv(dotenv_path='.flaskenv')
需要注意的是 .flaskenv
或 .env
文件需要放置在启动器的同级目录,这里是项目的根目录。
# .flaskenv
FLASK_APP=starter:app
FLASK_RUN_HOST=0.0.0.0
FLASK_RUN_PORT=5000
FLASK_ENV=development
# production or development