接收空表单的烧瓶

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/

【讨论】:

以上是关于接收空表单的烧瓶的主要内容,如果未能解决你的问题,请参考以下文章

如何从烧瓶中接收.js文件上的jsonify变量

如何在烧瓶路由中接收网络摄像头视频流?

烧瓶上传 + 文件夹创建 + 前端展示

Flask OpenCV 以字节为单位发送和接收图像

反应 axios 从 Flask 后端获取空数据

空表单 POST 数据