欧根喵
欧根喵
Published on 2025-08-27 / 23 Visits
0
0

Flask 学习日志 001

1、开始

main.py

from flask import Flask

app = Flask(__name__)

@app.route('/test')
def home():
    return get_system_usage()

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

安装代码 
pip install flask
pip install cryptography  用于支持pymysql 的新增方法 支持mysql8.0 + 的支持
pip install pymysql

2、路由注册

1、普通模式

@home.route('/')
def get_home_message():
    return 'home'

2、蓝图模式

### 子路由页面
from flask import Blueprint, request
导入依赖 其中Blueprint 是蓝图
home = Blueprint('home', __name__,url_prefix='/home')

@home.route('/')
def get_home_message():
    return 'home'

### 主路由页面
引入路由
from routes import home
注册路由
app.register_blueprint(home, url_prefix='/visitor')

3、多层嵌套路由(蓝图模式)

### 主页面 一级 /index

导入
from flask import Blueprint, request
from routes.admin.admin_homeimport admin_home

注册
app.register_blueprint(admin_home, url_prefix='/index')

### 二级  访问 /index/admin

导入
from flask import Blueprint, request
from routes.admin.routers.home import home

注册
admin_home = Blueprint('admin_home', __name__)

@admin_home.route('/admin')
def get_home_message():
    return 'two'

admin_home.register_blueprint

### 三级 访问 /index/admin/home

导入
from flask import Blueprint, request

注册
home = Bluerprint('/home')
### 主要代码
register_blueprint  // 注册子路由

### 蓝图
Blueprint

3、统一请求拦截器

from flask import Blueprint, request
from tools.mysql_admin import check_admin_token
from routes.admin.routers.home import home


admin_index_home = Blueprint('admin_home', __name__)

# 统一的请求拦截 检查是否带有token 如果带有则检查token  校验正常则继续执行 不正常返回错误
@admin_index_home.before_request
def check_authorization():
    # 在每个请求前检查 Authorization 头
    auth_header_token = request.headers.get('Authorization')

    if not auth_header_token:
        return {
            "success": False,
            "message": "缺少 Authorization 头部信息"
        }

    if not check_admin_token(auth_header_token):
        return{
            "success": False,
            "message": "无效的 Authorization 头部信息"
        }

    return  None

# 注册管理员下的路由们
admin_index_home.register_blueprint(home)

铸币作者在这卡了好一会 原因是获取不到Authorization token

在Apifox 环境下可以获取服务器可以正常响应,浏览器环境下就不行,查了好些资料注意到有个浏览器自动请求的预检请求,方法是OPTIONS,是浏览器自动向api发送的请求,用于获取api支持的方法,我的代码最早没有处理这个方法 导致代码报错 还看不出原因,加入了 这段代码才能正常工作,因为不进行检查,浏览器就不会进行后续操作

    # 跳过 OPTIONS 预检请求
    if request.method == 'OPTIONS':
        return

详情 : OPTIONS


Comment