直接上代码了
"""
# @Time : 2023/11/26
# @Author : bgm
# @File : mange.py
"""
from flask import Flask, abort, request, g, jsonify
app = Flask(__name__)
# @app.before_first_request # 3.0版本之后已经弃用
# ---------------------------------------------------这个有点问题
@app.before_request
def before_first_request():
if not hasattr(g, 'first_request_done'):
print('This will run only once, before the first request')
g.first_request_done = True
@app.before_request
def before_request():
print('before_request')
# 获取用户身份信息(这是一个简化的例子)
# user_id = request.headers.get('X-User-Id') # 请求头没这个
user_id = request.headers.get('User-Agent')
# 进行用户身份验证逻辑
if not user_id:
# # 如果没有用户身份信息,返回 401 Unauthorized
# abort(401)
# 如果未提供用户ID,可能要返回更详细的响应。
return jsonify({'error': '未经授权'}), 401
# 注册一个处理 401 错误的函数
@app.errorhandler(401)
def page_not_found(error):
# return 'Unauthorized', 401
return jsonify({'error': '未经授权'}), 401
@app.after_request
def after_request(response):
print('After Request')
# 可以在这里进行一些后处理操作,比如添加响应头或修改响应内容
#---------------------------------------------------响应头
# 在响应头中添加自定义信息
response.headers['X-Custom-Header'] = 'Custom Value'
#---------------------------------------------------响应内容
# 获取原始的响应内容
original_content = response.get_data(as_text=True)
# 在原始内容后面添加一段字符串
modified_content = f'{original_content} - Modified Content'
# 将修改后的内容重新设置给响应对象
response.set_data(modified_content)
#---------------------------------------------------返回
# 返回修改后的响应
return response
@app.teardown_request
def teardown_request(exception):
print('Teardown Request')
# 在这里进行一些清理操作,比如关闭数据库连接
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
return 'This is a POST request'
else:
return 'This is a GET request' + ' Hello world!'
@app.route('/user/<username>', defaults={'page': 1})
@app.route('/user/<username>/page/<int:page>')
def user(username, page):
return f'User: {username}, Page: {page}'
@app.route('/error')
def trigger_error():
# 如果某些条件不符合预期,中断请求并返回 404 错误
abort(404)
# 注册一个处理 404 错误的函数
@app.errorhandler(404)
def page_not_found(error):
return 'page not found', 404
@app.cli.command('initdb') # 用于注册自定义的命令行命令。 # flask initdb
def initdb_command():
"""初始化数据库。"""
# 在这里包含实际的数据库初始化逻辑
print('数据库已初始化')
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
标签:特殊,return,flask,app,request,401,装饰,def,before
From: https://www.cnblogs.com/code3/p/17857192.html