request.args.get('key') 返回 NULL - Flask
我正在尝试把变量 'email' 从我的视图中的 'signup' 方法传递到 'character' 方法。但是,
request.args.get('email')
在数据库中保存的是 NULL。我搞不清楚为什么会这样。
这是在把 'email' 变量传递到 '/character' 后显示的内容:
http://127.0.0.1:5000/character?email=test%40test.com
这是我在 'views.py' 中的代码:
@app.route('/signup', methods=['GET','POST'])
def signup():
if request.method == 'GET':
return render_template('signup.html')
email = request.form['email']
return redirect(url_for('character', email=email))
@app.route('/character', methods=['GET', 'POST'])
def character():
if request.method == 'GET':
return render_template('character.html')
email = request.args.get('email')
password = request.form['password']
name = request.form['username']
temp = model.Actor(request.form['gender'], request.form['height'], request.form['weight'], request.form['physique'])
user = model.User(name, email, password, temp)
db.session.add(temp)
db.session.add(user)
db.session.commit()
return redirect(url_for('movies'))
其他部分都正常工作,只有 'email' 没有被保存为 'test@test.com',而是保存成了 NULL。
提前谢谢你的帮助!
编辑: 使用 Flask 的会话功能解决了这个问题。
1 个回答
28
当你提交注册表单时,你使用的是POST方法。因为使用了POST,你的表单数据会被放到 request.form
里,而不是 request.args
。
你的邮箱地址会在:
request.form.get('email')
如果你访问的链接是 /characters?email=someemail@test.com
,而且你没有立即用:
if request.method == 'GET':
return render_template('character.html')
在你的角色视图中渲染模板,那么你才能访问:
request.args.get('email')
想了解更多信息,可以查看 werkzeug 的请求/响应文档。
补充:这里有一个完整的工作示例(去掉了你的模型部分)
app.py
from flask import request, Flask, render_template, redirect, url_for
app = Flask(__name__)
app.debug = True
@app.route('/signup', methods=['GET','POST'])
def signup():
if request.method == 'GET':
return render_template('signup.html')
email = request.form['email']
return redirect(url_for('character', email=email))
@app.route('/character', methods=['POST', 'GET'])
def character():
email_from_form = request.form.get('email')
email_from_args = request.args.get('email')
return render_template('character.html',
email_from_form=email_from_form,
email_from_args=email_from_args)
if __name__ == '__main__':
app.run()
templates/signup.html
<html>
Email from form: {{ email_from_form }} <br>
Email from args: {{ email_from_args }}
</html>
templates/character.html
<html>
<form name="test" action="/character" method="post">
<label>Email</label>
<input type="text" name="email" value="test@email.com" />
<input type="submit" />
</form>
</html>
通过POST提交登录表单会填充 来自表单的邮箱
访问链接 http://localhost:5000/character?email=test@email.com
(通过GET)会填充 来自参数的邮箱