python基于框架flask实现完整接口
flask入门
官网[https://flask.palletsprojects.com/zh-cn/stable/quickstart/]
涉及概念
init.py
| 部分 | 归属 |
|---|---|
__init__.py 文件的含义和作用 | Python 语言默认 |
在 __init__.py 中导入子模块并定义为列表 | Python 常规代码写法 |
使用 blueprints = [...] 然后在 create_app 中循环注册 | Flask 应用层的使用方式(利用了 Python 的列表和循环) |
所以,init.py 的这种用途是纯 Python 的,Flask 只是“消费”了你通过 Python 机制准备好的蓝图列表
blueprint
Blueprint 就是把一组相关的路由(接口)打包成一个“模块”,然后挂到 Flask 应用上
为什么使用blueprint
- 不分模块
所有接口都写在 app.py 里,文件会变得又长又乱
- 用 Blueprint
每个功能(比如 user、auth、blog)各自一个文件,然后在主程序里注册一下就行
三步拆解blueprint构建
- 定义一个蓝图(比如 user.py)
from flask import Blueprint
bp = Blueprint('user', __name__, url_prefix='/api/user')
@bp.route('/profile')
def profile():
return {"name": "Alice"}
- 在主程序里注册它(比如 app/init.py)
from flask import Flask
from .api import user # 导入上面那个文件
def create_app():
app = Flask(__name__)
app.register_blueprint(user.bp) # 注册
return app
- 启动后访问:/api/user/profile 就能拿到数据
项目demo
python-flask[https://gitee.com/kcnf-python/python-flask]
部分代码说明
统一入口:创建应用并启动服务器
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
统一入口:创建应用并启动服务器
"""
from app import create_app
# 创建 Flask 应用实例(声明式注册所有蓝图)
app = create_app()
if __name__ == '__main__':
# 获取主机和端口(可从环境变量读取,默认 0.0.0.0:5000)
host = '0.0.0.0'
port = 5000
debug = app.config.get('DEBUG', False)
app.run(host=host, port=port, debug=debug)
注册相关路径
from flask import Flask
from app.config import get_config
from app.api import blueprints # 导入显式声明的蓝图列表
def create_app():
app = Flask(__name__)
config_obj = get_config()
app.config.from_object(config_obj)
# 声明式注册:循环注册 blueprints 列表中的每个蓝图
for bp in blueprints:
app.register_blueprint(bp)
print(f"✓ Registered blueprint: {bp.name}")
@app.route('/')
def index():
return {"message": f"Welcome to {app.config['API_TITLE']}"}
return app
实现相关接口定义
from flask import Blueprint, jsonify, request
bp = Blueprint('user', __name__, url_prefix='/api/user')
# 模拟用户数据
users_db = {
1: {"id": 1, "name": "Alice", "email": "alice@example.com"},
2: {"id": 2, "name": "Bob", "email": "bob@example.com"},
}
@bp.route('', methods=['GET'])
def list_users():
"""获取所有用户"""
return jsonify(list(users_db.values()))
@bp.route('/<int:user_id>', methods=['GET'])
def get_user(user_id):
"""获取单个用户"""
user = users_db.get(user_id)
if not user:
return jsonify({"error": "User not found"}), 404
return jsonify(user)
@bp.route('', methods=['POST'])
def create_user():
"""创建用户"""
data = request.get_json()
new_id = max(users_db.keys()) + 1 if users_db else 1
user = {"id": new_id, "name": data.get("name"), "email": data.get("email")}
users_db[new_id] = user
return jsonify(user), 201
项目结构

验证结果

