2017-09-06 61 views
1

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

這裏是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和其他服務器的工作方式一致。此外,這些網址將保持唯一性,這有助於搜索引擎避免將相同的網頁編入索引兩次。

+0

非常感謝解釋,解決了這個問題。我已經刪除了斜線來獲得所需的響應。 – alexander