【问题标题】:Why does this default route redirect?为什么这个默认路由重定向?
【发布时间】:2018-02-15 13:19:34
【问题描述】:

在使用 curl 测试 API 功能时,我尝试将发布数据发送到下面的路由。在观看调试时,视图会响应 301 重定向,以防止获取所需的数据。我做错了什么?

这是我目前的看法。

from flask import Flask, jsonify, render_template, request
from flask_cors import CORS
app = Flask(__name__)




@app.route('/')
def index():
    return render_template('index.html')


@app.route("/api/user/login/", methods=["GET", "POST"])
def login(*args, **kwargs):
    print 'Got request for login'
    print args
    print kwargs
    print request.args
    print request.args.get("username")
    print request.values.get("username")
    print request.method

    response = {'username': 'Erik'}

    dict = request.args
    for key in dict:
        print 'form key ' + dict[key]

    # return jsonify(response)
    return response


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080)

调用如下代码,

curl -d "username=Flash" http://0.0.0.0:8080/api/user/login

启动重定向

/home/user/fab/bin/python2.7 /home/user/PycharmProjects/myelm/server.py
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
127.0.0.1 - - [06/Sep/2017 23:04:25] "POST /api/user/login HTTP/1.1" 301 -

【问题讨论】:

    标签: python api redirect curl flask


    【解决方案1】:

    这是关于此行为的documentation

    唯一 URL / 重定向行为 Flask 的 URL 规则基于 Werkzeug 的路由模块。该模块背后的想法是根据 Apache 和早期 HTTP 服务器制定的先例确保美观且唯一的 URL。

    采取以下两条规则:

    @app.route('/projects/')
    def projects():
        return 'The project page'
    
    @app.route('/about')
    def about():
        return 'The about page'
    

    虽然它们看起来很相似,但它们在 URL 定义中对尾部斜杠的使用有所不同。在第一种情况下,项目端点的规范 URL 有一个尾部斜杠。从这个意义上说,它类似于文件系统上的文件夹。不带斜杠访问它会导致 Flask 重定向到带有斜杠的规范 URL。

    然而,在第二种情况下,URL 的定义没有尾部斜杠,就像类 UNIX 系统上文件的路径名一样。使用尾部斜杠访问 URL 将产生 404“未找到”错误。

    这种行为允许相对 URL 继续工作,即使尾部斜杠被省略,这与 Apache 和其他服务器的工作方式一致。此外,URL 将保持唯一性,这有助于搜索引擎避免将同一页面编入两次索引。

    【讨论】:

    • 非常感谢您的解释,解决了这个问题。我已删除尾部斜杠以获得所需的响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2018-02-14
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多