接收空表单的烧瓶
Posted
技术标签:
【中文标题】接收空表单的烧瓶【英文标题】:Flask receiving empty forms 【发布时间】:2012-12-13 08:37:45 【问题描述】:我正在尝试在 Flask 中设置一个简单的表单,用于我自己的教育。我有一个带有此表单代码的 login.html 页面:
<form action=" url_for('login') " method="post">
<div>
<label for="username">Username</label>
<div>
<input type="text" id="username" name="username" placeholder="Username">
</div>
</div>
<div>
<label for="password">Password</label>
<div>
<input type="password" id="password" name="password" placeholder="Password">
</div>
</div>
<div >
<input class="btn" type="submit">
</div>
</form>
我正在使用如下代码来接收它,但 Flask 返回一个空的request.form
,所以我无法处理它。
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
request.form['username']
...
我现在真的不想学习另一个库 (WTForms),而且我正在使用引导程序,这样会更让人头疼。 Flask/HTML 在这里我看不到什么?
【问题讨论】:
请求到达你的视图函数了吗?也许表单有不同的 URL,而不是“/login”?试着只放“。”在行动。只是对它是否真的像您期望的那样出现在视图中感兴趣。 【参考方案1】:我遇到了这个问题,但这是因为我忘记将 name
属性分配给我的输入元素,而我试图通过 id
属性引用访问表单数据
即
我的 HTML 和 Python 是如下图所示
HTML
<input type="text" id="usernameTxtBx">
Python
request.form['usernameTxtBx']
我现在已经做了什么:
HTML
<input type="text" name="username" id="usernameTxtBx">
Python
request.form['username']
我还需要确保我使用的是POST
请求。 GET
请求在我的 python 代码中给了我一个空字典。
OP 没有犯这些错误。但这可能会对偶然发现此线程的人有所帮助。
【讨论】:
id="usernameTxtBx"
是不必要的,因为它没有反映在请求中。您可以通过 request.args
而不是仅访问 POST 的 request.form
一起访问 GET 和 POST 变量
谢谢! WTForms 看起来很棒,但对于我的需求来说太过分了。【参考方案2】:
我遇到了这个问题。 一些工具,如邮递员或一些库或网络浏览器,以烧瓶不识别为发布值的方式发送数据。从我的角度来看,这是一个烧瓶问题。
这是我用来解决它的解决方法: 1 - 我使用 json 发送信息。看看这个:
How to send a JSON object using html form data
2 - 我没有使用以下方法获取参数: 值 = request.form["myparamname"] 我用这个:
json_data = request.get_json(force=True)
value = json_data["myparamname"]
【讨论】:
【参考方案3】:login.html
% extends "layout.html" %
% block content %
<div class="form">
<h2>Sign In</h2>
% for field in form.errors %
% for error in form.errors[field] %
<div class="alert alert-error">
<strong>Oops...</strong> error.
</div>
% endfor %
% endfor %
<form action=" url_for('login') " method=post>
form.hidden_tag()
form.email.label
form.email
form.password.label
form.password
<p> <input id="submit" name="submit" type="submit" class="btn btn-inverse" value="Sign In"></p>
</form>
</div>
% endblock %
forms.py
class SigninForm(Form):
email = TextField("email", [validators.Required("Please enter your email")])
password = PasswordField('Password', [validators.Required("Please enter a password.")])
submit = SubmitField("Sign In")
然后在您的视图中导入登录信息并像这样创建您的登录方法
@app.route('/login', methods=['GET', 'POST'])
def signin():
form = SigninForm()
if form.validate_on_submit():
session['email'] = form.email.data
flash('You are logged in')
return redirect(url_for('dashboard'))
return render_template('signin.html', form=form)
请参阅本教程以获取更详细的说明 http://pypix.com/python/building-flask-blog-part-1/
【讨论】:
以上是关于接收空表单的烧瓶的主要内容,如果未能解决你的问题,请参考以下文章