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 pymysql2、路由注册
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 // 注册子路由
### 蓝图
Blueprint3、统一请求拦截器
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