文檔
- https://flask.palletsprojects.com/
- https://github.com/pallets/flask
環境
$ python --version
Python 3.7.0
$ pip show flask
Name: Flask
Version: 2.0.3
需求:
全局入口
before_request
,我們攔截使用者請求,對使用者權限進行統一校驗,校驗通過再放行,否則攔截使用者。
将校驗通過的目前使用者
user_id
存放到全局變量,以便後續處理方法使用,比如擷取目前使用者的一些資訊
實作:
1、Flask使用全局變量
g
的示例
# -*- coding: utf-8 -*-
from flask import Flask, g
app = Flask(__name__)
@app.get('/')
def index():
return {'user_id': g.user_id}
@app.before_request
def handle_before_request():
g.user_id = 100
print('before_request')
if __name__ == '__main__':
app.run(debug=True)
2、改用手動注冊的方式進行路由綁定, 也可以擷取到全局變量
g
# -*- coding: utf-8 -*-
from flask import Flask, g
app = Flask(__name__)
def index():
return {'user_id': g.user_id}
@app.before_request
def handle_before_request():
g.user_id = 100
print('before_request')
# 改用手動注冊的方式進行路由綁定
app.add_url_rule('/', view_func=index)
if __name__ == '__main__':
app.run(debug=True)
# -*- coding: utf-8 -*-
from flask import Flask, g
app = Flask(__name__)
def index():
return {'user_id': g.user_id}
# 拆分到單獨的函數使用 g
def permission():
g.user_id = 100
@app.before_request
def handle_before_request():
permission()
print('before_request')
# 改用手動注冊的方式進行路由綁定
app.add_url_rule('/', view_func=index)
if __name__ == '__main__':
app.run(debug=True)
問題及報錯
from flask import g
g['user_id'] = 1
TypeError: '_AppCtxGlobals' object does not support item assignment
from flask import g
g.user_id = 1
TypeError: '_AppCtxGlobals' object is not subscriptable