在使用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 -
答案 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将保持唯一,这有助于搜索引擎避免两次索引相同的页面。