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

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

项目结构

img

验证结果

img