在Javascript& Python with Flask:Method Not Allowed error 405

时间:2014-06-29 23:24:07

标签: javascript python flask

我正在使用Flask运行服务器。这是我的views.py:

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文件位于相同的“templates”目录下。但是,我收到消息“方法不允许。请求的URL不允许使用该方法”。

查看Stackoverflow上提出的类似问题,我确保为方法添加“GET”和“POST”。为什么我还有这个错误?

作为测试,“mypython.py”如下:

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

restaurant_choice(getzipcode, getcuisine)

1 个答案:

答案 0 :(得分:1)

这里有多个问题:

  1. 您实际上并未向POST发送/mypython.py个请求 - 您要将其发送到/(只能通过GET访问,因此会出错。)< / LI>
  2. 您正在提交表单(通过$('#myForm').submit()在下一行通过$.ajax发出ajax请求 - 浏览器将为您创建第一个并且因为这将导致页面导航事件,它将取消第二个。
  3. /mypython.py不是定义的路由,因此会产生404.Flask只处理明确注册的路径(Flask自动添加/static/<path:file_path>,这就是为什么静态文件工作)。
  4. templates文件夹中的文件默认不会作为服务资源公开,而是通过render_template函数通过Jinja传递。
  5. 为了向最终用户公开Python功能(通过JavaScript或作为网页使用),您应该明确地使其可路由(通过@app.routeapp.add_url_route)。