1
我有一個Flask應用程序,它有兩個藍圖,一個API和一個Web前端。我想從前端藍圖調用API藍圖中的函數,但使用不同的上下文,具體而言,我想更改HTTP_ACCEPT
環境變量,然後恢復原始請求以進一步處理。從其他視圖中調用具有修改環境的視圖
當我使用ctx.push()
/ctx.pop()x
或with app.request_context(request.environ)
時,環境變量不會變回原始狀態。
@dashboard_blueprint.route('/station', methods=['GET'])
def station():
station_id = request.args['id']
print(request.environ['HTTP_ACCEPT'])
# >>> text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
with app.request_context(request.environ) as ctx:
ctx.request.environ['HTTP_ACCEPT'] = 'application/vnd.geo+json'
# Call API function here.
print(request.environ['HTTP_ACCEPT'])
# >>> application/vnd.geo+json
...
我預計第二print()
打印原稿text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
但它不是打印從內上下文application/vnd.geo+json
。
我可以存儲原始值並在使用內部上下文後恢復它,但似乎沒有必要。爲什麼上下文彈出後環境不會恢復?
編輯的清晰度。它看起來像Flask不會做環境字典的副本,這不是我所期望的。 – MerseyViking
我想。複製字典是我期望request_context()函數執行的操作。但如果沒有,那麼我將不得不自己做。不是問題,只是看起來不正確。 – MerseyViking