我正在用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文件位于同一“模板”目录下。但是,我收到消息“不允许使用方法。所请求的URL不允许使用该方法”。
查看关于Stackoverflow的类似问题,我确保为方法添加“ GET”和“ POST”。为什么然后我仍然有此错误?
作为测试,“ mypython.py”如下:
def restaurant_choice(zipcode, cuisine):
print "zipcode:", zipcode
return "cuisine: ", cuisine
restaurant_choice(getzipcode, getcuisine)
最佳答案
这里有多个问题:
您实际上并没有向POST
发送/mypython.py
请求-您正在将其发送到/
(只能通过GET
访问,因此会出现错误。)
您既要提交表单(通过$('#myForm').submit()
),又要在下一行通过$.ajax
发出ajax请求-浏览器将为您创建第一个请求,因为这将导致页面导航事件,因此将取消第二个。/mypython.py
不是已定义的路由,因此将导致404。Flask仅处理已向其明确注册的路由(Flask为您自动添加了/static/<path:file_path>
,这就是静态文件起作用的原因)。templates
文件夹中的文件默认情况下不公开为服务资源,而是通过render_template
函数(通常)通过Jinja传递。
为了向最终用户展示Python功能(以通过JavaScript或作为网页使用),您应明确使其可路由(通过@app.route
或app.add_url_route
)。