通过表单在 Flask 上发布数据给出 400 Bad Request
Posted
技术标签:
【中文标题】通过表单在 Flask 上发布数据给出 400 Bad Request【英文标题】:Posting Data on Flask via form is giving 400 Bad Request 【发布时间】:2013-11-03 21:48:54 【问题描述】:我正在尝试通过前端发布数据,而烧瓶应用程序抛出 400 错误请求。但是,如果我使用 Curl 调用做同样的事情,它似乎工作正常。我不知道表格中缺少什么。
以下是我的表单代码
<script>
function sub()
console.log('sub function');
$("#form1").submit();
</script>
<form id="form1" action="/final" method="post">
<input id='query' type="text">
<button type="submit" onClick='sub()'>Submit »</button>
</form>
在服务器端:
@app.route('/final',methods=['POST','GET'])
def message():
if request.method == 'POST':
app.logger.debug(" entered message function"+ request.form['query'])
q = request.form['query']
return render_template('final.html',query=q,result="Core_Table Output")
服务器端对我来说似乎很好。因为我收到了 curl 请求的响应
curl http://localhost:8000/final -d "query=select starct st blah blah" -X POST -v
* Trying 127.0.0.1... connected
> POST /gc HTTP/1.1
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: localhost:8000
> Accept: */*
> Content-Length: 41
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 41out of 41 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: text/html; charset=utf-8
< Content-Length: 1961
< Server: Werkzeug/0.9.4 Python/2.7.3
< Date: Thu, 24 Oct 2013 23:33:12 GMT
【问题讨论】:
什么是#fquery
?我在您的代码 sn-p 中只看到 #form1
和 #query
。
抱歉忘记更改了。只有它的form1。
What is the cause of the Bad Request Error when submitting form in Flask application? 的可能重复项
【参考方案1】:
除了@Robin Krahl 所说的,您还应该在表单中添加enctype="multipart/form-data"
。所以代码可能是这样的:
<form id="form1" action="/final" method="post" enctype="multipart/form-data">
<input id='query' type="text">
<button type="submit" onClick='sub()'>Submit »</button>
</form>"
【讨论】:
【参考方案2】:啊,我想我明白了:您只为input
元素设置了id
,但没有设置name
。然而,name
用于发送到服务器的表单数据。这会在request.form['query']
处导致KeyError
,从而导致400 错误。
【讨论】:
天啊。我知道这将是非常微不足道的。可悲的是,我找不到相同的文档。 Google flask 400 错误,打开 Flask Quickstart 和 Strg+F 400。;-) 我这样做了一段时间......在诉诸#SO之前以上是关于通过表单在 Flask 上发布数据给出 400 Bad Request的主要内容,如果未能解决你的问题,请参考以下文章
GSUtil rsync 在 S3 存储桶上给出 400 不可重试异常