2014-06-29 171 views
2

我正在用瓶的服務器。這裏是我的views.py:電話:不允許的方法錯誤405

from flask import render_template 
from app import app 

@app.route('/') 
@app.route('/user_form.html', methods=["GET", "POST"]) 
def index(): 
    return render_template("user_form.html") 

的user_form.html包含以下JavaScript:

<SCRIPT> 
    function get_UserInputValues(form) { 
    var getzipcode = document.getElementById('user_zip').value; 
    var getcuisine = document.getElementById('cuisine').value; 
    var selection1 = $("#slider1").slider("value"); 
    var selection2 = $("#slider2").slider("value"); 
    var selection3 = $("#slider3").slider("value"); 
    var myurl = 'http://127.0.0.1:5000/mypython.py'; 

    /*alert(getzipcode); 
    alert(getcuisine); 
    alert(selection1); 
    alert(selection2); 
    alert(selection3);*/ 

    $('#myForm').submit(); 

    $.ajax({url: myurl, type: "POST", data: {zip: getzipcode, cuisine:getcuisine}, dataType: 'json', done: onComplete}) 

    } 

    function onComplete(data) { 
     alert(data); 
    }; 
    </SCRIPT> 

的user_form.html和mypython.py文件是相同的 「模板」 目錄下。但是,我收到了消息「方法不允許,請求的URL不允許使用該方法」。

看着問#2類似的問題,我就確定包括「GET」和「POST」的方法。爲什麼我仍然有這個錯誤?

作爲測試, 「mypython.py」 如下:

def restaurant_choice(zipcode, cuisine): 
    print "zipcode:", zipcode 
    return "cuisine: ", cuisine 

restaurant_choice(getzipcode, getcuisine) 
+0

什麼是mypython.py? –

+0

檢查動詞到達服務器的日誌。它真的是一個POST嗎?有時客戶端發送OPTIONS然後GET/POST。 – Javier

+0

這是我得到的日誌中的終端:127.0.0.1 - - [29月/ 6/2014 19時二十分41秒] 「POST/HTTP/1.1」 405 - – Rohit

回答

1

有多種問題在這裏:

  1. 您還沒有實際發送POST請求/mypython.py - 您發送它到/(它只能通過GET訪問,因此錯誤。)
  2. 你們都提交表格(通過$('#myForm').submit()通過$.ajax下一行做一個Ajax請求 - 瀏覽器將先爲你,因爲這將導致頁面導航事件將取消第二。
  3. /mypython.py/mypython.py不是一個定義的路由,所以會產生一個404. Flask只處理顯式註冊的路由(Flask自動爲你添加/static/<path:file_path>,這就是靜態文件工作的原因)。
  4. 文件中的文件夾templates不公開爲默認服務資源,而是通過神社(一般)由render_template函數傳遞。
  5. 爲了向終端用戶公開Python功能(通過JavaScript或網頁使用),您應該明確地使其可以路由(通過@app.routeapp.add_url_route)。