gpt4 book ai didi

python - 从其他 View 中调用具有修改环境的 View

转载 作者:行者123 更新时间:2023-12-01 04:15:43 25 4
gpt4 key购买 nike

我有一个 Flask 应用程序,它有两个蓝图、一个 API 和一个 Web 前端。我想从前端蓝图调用 API 蓝图中的函数,但使用不同的上下文,特别是我想更改 HTTP_ACCEPT 环境变量,然后恢复原始请求以进行进一步处理。

当我使用 ctx.push()/ctx.pop()xwith 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 不会复制您传递给 request_context 的数据。如果您传递现有环境,该环境将就地使用(和修改)。请传递一份副本。

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
print(request.environ['HTTP_ACCEPT'])

new_environ = request.environ.copy()
new_environ['HTTP_ACCEPT'] = 'test'

with app.request_context(new_environ):
print(request.environ['HTTP_ACCEPT'])

print(request.environ['HTTP_ACCEPT'])
return 'Hello, World!'

app.run()
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
test
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

关于python - 从其他 View 中调用具有修改环境的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34318699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com