rea*_*ter 5 python werkzeug flask
什么是 Http 400 错误请求以及导致它发生的原因?
是什么方法,我可以用它来知道key在request.form[key]那造成不好的请求,我该如何预防呢?
更新
正如 Gerand 在他的评论中提到的:
当您通过不存在的 http 请求文件时会发生此错误 [....]
为了更清楚,这里是我的示例代码,导致Bad Request:
你好.py
# -*- coding: utf-8 -*-
from flask import *
import re
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def checkName():
return render_template('hello.html')
@app.route('/hello',methods=['GET','POST'])
def printName():
if request.method=='POST':
username = request.form['username']
bad_key = request.form['bad_key'] # this key is not exist
return "Hello, ",username
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
你好.html
<form class="form-horizontal" action='/hello' method='POST' name="frm_submit">
<div class="form-group">
<label for="username" class="col-sm-2 control-label">User Name:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="username" name="username" placeholder="username">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Submit</button>
</div>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
从上面的代码中,浏览器返回时Bad Request - The browser (or proxy) sent a request that this server could not understand.没有给出导致此错误的键的线索。
因此,我可以使用哪种方法来知道key导致此错误的原因,以及如何防止它?
谢谢。
Flask 使用werkzeug库的MultiDict数据结构来保存 POST 数据。
如果您查看 的实现,MultiDict.__getitem__您可以看到如果未找到键,它将BadRequestKeyError以键的名称作为参数引发。因此,您可以检查异常的args属性来获取错误密钥的名称:
from werkzeug.exceptions import BadRequestKeyError
@app.route('/hello', methods=['GET', 'POST'])
def hello():
if request.method == 'POST':
username = request.form['username']
try:
bad_key = request.form['bad_key']
except BadRequestKeyError as ex:
return 'Unknown key: "{}"'.format(ex.args[0]), 500
Run Code Online (Sandbox Code Playgroud)
请注意,虽然BadRequestKeyErrors字符串表示形式是
400 Bad Request:浏览器(或代理)发送了该服务器无法理解的请求。
响应的状态实际上是
500内部服务器错误
的键request.form对应于所发布的 HTML 页面中表单中标签name的属性。input因此, a通常是由HTML 中的属性与路由中期望的名称BadRequestKeyError不匹配引起的。namerequest.form['some_name']
| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |