我有一个flask web应用程序,它使用render_模板,如下所示。我需要在响应中添加一个内容安全策略作为额外的http响应头。我试着按以下方法做,但都失败了,给了我500英镑。
一。
from flask import \
Flask, \
render_template
app = Flask(__name__,template_folder='tmpl')
@app.route('/')
def index():
resp =make_response(render_template('index.html'))
resp.headers['Content-Security-Policy']='default-src \'self\''
return resp
if __name__ == '__main__':
app.run(host='0.0.0.0', port=3001)
2。
@app.route('/')
def index():
resp =render_template('index.html')
resp.headers.add('Content-Security-Policy','default-src \'self\'')
return resp
if __name__ == '__main__':
app.run(host='0.0.0.0', port=3001)
这里有什么问题吗?
在终端上,当我以本地主机的身份访问web应用时,我看到了以下内容:3001
127.0.0.1--[2015年4月6日01:45:01]“获取/HTTP/1.1”500-
处理此问题最漂亮的方法是使用烧瓶内置装饰器,假设您希望将相同的标题附加到所有响应:
因此,在本例中,只需将此函数添加到routes模块:
这样一来,您的函数就可以像以前一样返回render_template(…)值,flask会自动将其包装在一个响应中,该响应在返回给客户机之前传递给after_request函数。
render_template
返回字符串,而不是响应。视图返回的字符串由烧瓶自动包装在响应中,这就是您可能会感到困惑的原因。使用呈现的模板构造响应。相关问题 更多 >
编程相关推荐