从html发送数据到python烧瓶服务器“GET/HTTP/1.1”405错误

问题描述:

python/AJAX非常新,并且已经在从internet/flask文档中的示例到目前为止都在拼接。基本上我试图做的是在点击(从mapbox API)发送纬度和经度坐标到烧瓶,并将这些数据打印到控制台(以证明它已成功退出Flask,以便稍后可以使用它)。从html发送数据到python烧瓶服务器“GET/HTTP/1.1”405错误

数据我想发送的格式为:

LngLat {lng: 151.0164794921875, lat: -33.79572045486767} 

HTML:

<button onclick=submit() type="button">POST</button> 

<script>  
map.on('click', function (e) { 
console.log(e.lngLat) 
}); 

function submit() { 
var myData = e.lngLat 
$.post("/", $("myData").serialize() 
); 
} 
</script> 

PY:

from flask import Flask 
from flask import request 
from flask import render_template 

app = Flask(__name__) 

@app.route('/', methods=['POST']) 
def home(): 
return render_template('index.html') 
print(request.form['myData']) 

if __name__ == '__main__': 
app.run(debug=True) 
当我尝试从控制台运行到本地主机

:5000我收到错误

127.0.0.1 - - [23/Sept/2016 23:21:15] "GET/HTTP/1.1" 405 - 

对不起,如果这是一个愚蠢的问题,但我很难过!感谢您的输入

+0

没有处理任何POST数据的代码。 –

+0

你的chrome调试器网络流量是什么样的? – GMarsh

+0

您还需要修复缩进并将您的打印语句移动到路线中的return语句之上 – GMarsh

您收到405错误的原因是因为您只有home()控制器,只接受POST方法。你正试图用GET方法得到回应。

所以,你需要改变methods论点@app.route()装饰

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

但尽管如此,你没有将处理你的AJAX请求的任何代码。

在你的路线中,允许使用GET方法,否则html永远不会呈现。

@app.route('/', methods=['POST', 'GET']) 

要打印纬度/经度到控制台,首先检查如果该方法是POST,然后打印:

if request.method == 'POST': 
    print(request.form.get('lng'), request.form.get('lat')) 

这是路径所得到的代码:

@app.route('/', methods=['POST', 'GET']) 
def home(): 
    if request.method == 'POST': 
     print(request.form.get('lng'), request.form.get('lat')) 
    return render_template('index.html')