Flask项目目录结构和demo工程:
- 代码文件单独打包;
- 通过蓝图区分不同模块,避免多个模块代码混在一起;
- 剥离route,统一维护,避免使用装饰器的方式,不直观;
demo
参考:Quickstart — Flask Documentation (2.2.x) (palletsprojects.com)
建议目录结构
myproject
├─src # 代码包
│ ├─hello
│ │ ├─__init__.py
│ │ ├─route.py
│ │ └─hello.py
│ ├─user
│ │ ├─__init__.py
│ │ ├─route.py
│ │ └─user.py
├─lib # 放一些代码逻辑中使用到的配置文件,如json文件等
├─run.py # 入口
└─requirements.txt # 依赖包
样例代码
src/_init_.py
from flask import Flask
app = Flask(__name__)
src/hello/_init_.py
from flask import Blueprint
bp_hello = Blueprint('hello', __name__, url_prefix="/hello")
from src.hello.route import init_routes
init_routes(bp_hello)
src/hello/route.py
from src.hello import hello
def init_routes(blp):
# 定义路由
blp.add_url_rule('/', 'hello', hello.hello_world)
src/hello/hello.py
def hello_world():
return 'Hello World!'
src/main.py
from src import app
from src.hello import bp_hello
# 注册蓝图
app.register_blueprint(bp_hello)
def run_app():
app.run()
if __name__ == '__main__':
app.run()
myproject/run.py
参考:Command Line Interface — Flask Documentation (2.2.x) (palletsprojects.com)
不建议使用flask_script,高版本flask会报错,需要降级或修改源码。
from src.main import run_app
if __name__ == '__main__':
run_app()
运行
cd myproject
python run.py