提出了多个问题,但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原因,而没有任何押韵或原因。
有人可以帮我吗?
答案 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的信息,以便更轻松地调试程序。
答案 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')