为什么这个默认路由重定向?

时间:2017-09-06 23:09:09

标签: python api redirect curl flask

在使用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 -

1 个答案:

答案 0 :(得分:1)

以下是关于此行为的documentation

  

唯一网址/重定向行为   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将保持唯一,这有助于搜索引擎避免两次索引相同的页面。