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

带后斜线的烧瓶柱

谈灵均
2023-03-14

文档指出,定义路由的首选方式是包含一个尾随斜杠:

@app.route('/foo/', methods=['GET'])
def get_foo():
    pass

这样,客户端就可以get/fooget/foo/并接收相同的结果。

但是,发布的方法没有相同的行为。

from flask import Flask
app = Flask(__name__)

@app.route('/foo/', methods=['POST'])
def post_foo():
    return "bar"

app.run(port=5000)

在这里,如果您post/foo,那么如果您不是在调试模式下运行,它将以method not allowed失败,或者如果您是在调试模式下运行,它将以以下通知失败:

请求已发送到此URL(HTTP://localhost:5000/foo),但路由系统自动发出重定向到“HTTP://localhost:5000/foo/”。URL是用后斜杠定义的,因此如果没有后斜杠访问Flask时,它将自动重定向到带有后斜杠的URL。请确保将您的后请求直接发送到此URL,因为我们无法使浏览器或HTTP客户端可靠地使用表单数据或没有用户交互进行重定向

而且,看来你甚至无法做到这一点:

@app.route('/foo', methods=['POST'])
@app.route('/foo/', methods=['POST'])
def post_foo():
    return "bar"

或者这个:

@app.route('/foo', methods=['POST'])
def post_foo_no_slash():
    return redirect(url_for('post_foo'), code=302)

@app.route('/foo/', methods=['POST'])
def post_foo():
    return "bar"

有没有办法让post同时处理非尾随斜杠和尾随斜杠?

共有1个答案

杭曦
2023-03-14

请参考这篇文章:尾随斜杠触发Flask路径规则中的404

您可以禁用严格斜杠以支持您的需要

全球范围:

app = Flask(__name__)
app.url_map.strict_slashes = False

...或按路由

@app.route('/foo', methods=['POST'], strict_slashes=False)
def foo():
    return 'foo'

您也可以查看此链接。关于github还有单独的讨论。https://github.com/pallets/flask/issues/1783

 类似资料:
  • 我正在阅读Flask quickstart指南,但是使用变量进行路由的示例对我来说并不适用。 http://127.0.0.1:5000/user/bob重定向到http://127.0.0.1:5000/user/bob/给我一个404 我还尝试了与指南中完全相同的代码。我的第一个要点中的错误是意料之中的吗?快速入门版本中的代码应该工作吗?还是我误解了什么? 我使用的是Python 2.7.10

  • 我发现很难找到有关这方面的资料。会是什么?我如何解决这个问题?有哪些可能的修复方法? UWSGI日志文件 时钟来源:unix检测到CPU核数:4当前工作目录:/home/pi检测到二进制路径:/usr/local/bin/uwsgi!!!没有内部路由支持,重建与pcre支持!!!*警告:您在没有主进程管理器的情况下运行uWSGI进程数限制为7336内存页大小为4096字节检测到最大文件描述符号:6

  • 我正在使用flask-RESTful开发API,并且对Flask的jsonify函数有问题。我正在使用flask-marshmlet进行JSON序列化。下面是一个非常简化的代码片段: 在本地,endpoint将返回具有键“data”和“error”的json;但是,当在Linux服务器上运行时,它会返回一个包含列表和在没有“data”和“error”键的情况下返回的结果。 我已经确定这种不一致是由

  • 我想重定向下的任何路径到静态应用。下面的视图应该捕获这些路径并提供相应的文件(它只打印本示例的路径)。这适用于,和。为什么路径会导致404错误?

  • 我在这里遵循烧瓶教程: http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world 我达到了我尝试的程度/跑py和我得到: 这看起来类似于: ImportError:没有名为flask的模块 但他们的解决方案没有帮助。作为参考,我确实有一个名为flask的文件夹,其中一位用户提到该文件夹可能会导致问题

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