当前位置: 首页 > 知识库问答 >
问题:

如何在烧瓶中设置响应标题?

公良天逸
2023-03-14

这是我的代码

@app.route('/hello', methods=["POST"])
def hello():
    resp = make_response(render_template('hello.html'))
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp

但是,当我从浏览器向服务器发出请求时,会出现以下错误:

XMLHttpRequest cannot load http://localhost:5000/hello. 
No 'Access-Control-Allow-Origin' header is present on the requested resource.

我也尝试过这种方法,在请求之后设置响应头:

@app.after_request
def add_header(response):
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response

没有骰子。我得到同样的错误。有没有办法只在路由函数中设置响应头?像这样的东西是理想的:

@app.route('/hello', methods=["POST"])
    def hello(response): # is this a thing??
        response.headers['Access-Control-Allow-Origin'] = '*'
        return response

但是我无论如何也找不到这样做。请帮忙。

编辑

如果我卷曲的url与POST请求这样:

curl -iX POST http://localhost:5000/hello

我得到的答复是:

HTTP/1.0 500 INTERNAL SERVER ERROR
Content-Type: text/html
Content-Length: 291
Server: Werkzeug/0.9.6 Python/2.7.6
Date: Tue, 16 Sep 2014 03:58:42 GMT

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request.  Either the server is overloaded or there is an error in the application.</p>

有什么想法吗?

共有3个答案

程仲卿
2023-03-14

这就是如何在我的flask应用程序中添加标题的方法,它工作得非常好

@app.after_request
def add_header(response):
    response.headers['X-Content-Type-Options'] = 'nosniff'
    return response
梁兴文
2023-03-14

使用烧瓶的make_response,例如

@app.route("/")
def home():
    resp = make_response("hello") #here you could use make_response(render_template(...)) too
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp

从烧瓶文件,

瓶子作出响应(*args)

有时有必要在视图中设置其他标题。由于视图不必返回响应对象,但可以返回一个由Flask本身转换为响应对象的值,因此向其添加标题变得很棘手。可以调用此函数而不是使用返回,您将得到一个响应对象,您可以使用它来附加标题。

白芷阳
2023-03-14

你可以很容易地做到这一点:

@app.route("/")
def home():
    resp = flask.Response("Foo bar baz")
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp

看看烧瓶。回应及flask.make_response()

但是我发现您还有一个问题,因为after\u请求也应该正确处理它。

编辑
我刚刚注意到您已经在使用make_response这是一种方法。就像我之前说的那样,在请求之后也应该起作用。尝试通过curl点击endpoint,看看标题是什么:

curl -i http://127.0.0.1:5000/your/endpoint

你应该看到

> curl -i 'http://127.0.0.1:5000/'
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 11
Access-Control-Allow-Origin: *
Server: Werkzeug/0.8.3 Python/2.7.5
Date: Tue, 16 Sep 2014 03:47:13 GMT

注意访问控制允许原点标题。

编辑2
正如我所怀疑的,你得到的是500,因此你没有像你所想的那样设置标题。尝试添加应用程序。debug=True在启动应用程序并重试之前。您应该得到一些输出,显示问题的根本原因。

例如:

@app.route("/")
def home():
    resp = flask.Response("Foo bar baz")
    user.weapon = boomerang
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp

提供一个格式很好的html错误页面,底部有这个(有助于curl命令)

Traceback (most recent call last):
...
  File "/private/tmp/min.py", line 8, in home
    user.weapon = boomerang
NameError: global name 'boomerang' is not defined
 类似资料:
  • 问题内容: 例如,此URL: 应该返回一个MIME类型的响应。我有两个静态图像, 如果type为1,则应返回,否则返回。在烧瓶中怎么做? 问题答案: 您使用类似 发送回或,具体取决于类型查询参数。有关更多信息,请参见函数和对象的文档。

  • 我已经用flask在python上制作了一个restapi(端口:5000),我正在从一个网站(端口:80)发出get和post请求。我收到了cors错误,所以我尝试在RESTAPI中为站点创建一个响应头。但是我得到了导入错误: 我已经下载了烧瓶cors模块并升级它,并确保它是在正确的路径,但它仍然不工作。 API代码:

  • 我正在检索mongo集合中与子字符串查询匹配的所有文档: 然后将所有匹配的文档作为JSONArray返回给java客户端: 当我想在java端解析JSONArray时,我必须执行以下操作: 我很有信心我在这里做错了什么。我不必先将JSONArray元素转换为字符串,然后再转换为JSONObject。我是否可以直接从JSONArray中检索JSONObject,而不用先将其转换为字符串?

  • 我正在使用Flask,并从get请求返回一个XML文件。如何将内容类型设置为xml? 例如。

  • 问题内容: 我试图用一个烧瓶形式的sqlalchemy请求的结果填充选择字段。 这是代码: 这是模板: 查看: 模型(仅粘贴了关联表和作者表,很多列都不用了) 我目前收到此错误: 我真正想要的是,选择字段显示作者姓名及其编号,然后将作者编号返回至应用程序(返回至位于头的名为“ add_author”的函数)。 谢谢。 问题答案: 您有两个问题: 正如肖恩·维埃拉(Sean Vieira)在回答中指

  • 问题内容: 我对Flask和Matplotlib非常陌生。我希望能够显示我在某些html中生成的简单图表,但是我很难弄清楚该怎么做。这是我的Python代码: 这是我的HTML: 问题答案: 您可以在Flask URL路由处理程序中即时生成图像: 然后,您需要将图像包含在HTML模板中: