BadRequestKeyError

时间:2018-10-01 17:39:56

标签: python flask

提出了多个问题,但SO上存在类似错误。我已经尝试了所有解决方案,但仍然会收到一个美丽的错误:

  

werkzeug.exceptions.HTTPException.wrap..newcls:400错误的请求:KeyError:'username'

以下是我的html表单:

<form action='/login' method = "GET">
    <label>Name: </label>
    <input name="username" type="text">
    <input type="submit" name='submit' value='submit'>
</form>

以下是处理表单数据的功能:

@app.route('/login', methods = ['GET'])
def login():
    if request.method == "GET":
        un = request.form['username']
        return un

我已经学会了Bottle并且正在向Flask过渡。 到目前为止,我已经尝试了以下方法: 1)前往POST 2)request.form.get('用户名',无) 3)在功能路由中添加POST原因,而没有任何押韵或原因。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

您需要在html文件中更改方法(将 GET 更改为 POST ),并将该方法也添加到装饰器@app.route中。不要忘记在这种情况下,需要返回( GET )来呈现html文件。

@app.route("/login", methods = ['GET', 'POST'])
def login():
if request.method == "POST":
    # import pdb; pdb.set_trace()
    un = request.form.get('username', None)
    return un

return render_template('form.html')

提示:了解有关pdb的信息,以便更轻松地调试程序。

https://realpython.com/python-debugging-pdb/

https://docs.python.org/3/library/pdb.html

答案 1 :(得分:1)

无需更改表单操作方法。但是当您使用GET方法发送表单数据时,您的数据将作为URL变量传输,并且您需要通过以下方式读取数据:

if flask.request.method == 'GET':
    username = flask.request.args.get('username')

,如果您将方法更改为POST,请阅读以下内容:

if flask.request.method == 'POST':
    username = flask.request.values.get('username')