24

我正在尝试在 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 在这里我看不到什么?

4

3 回答 3

30

我遇到了这个问题,但这是因为我忘记为name我的输入元素分配一个属性,而我试图通过id属性引用访问表单数据

IE

我的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没有犯这些错误。但这可能会对偶然发现此线程的人有所帮助。

于 2016-05-26T09:24:48.067 回答
10

我有那个问题。一些工具,如邮递员或一些库或网络浏览器,以烧瓶不识别为发布值的方式发送数据。从我的角度来看,这是一个烧瓶问题。

这是我用来解决它的解决方法: 1 - 我使用 json 发送信息。看看这个:

如何使用 html 表单数据发送 JSON 对象

2 - 我没有使用以下方法获取参数: value = request.form["myparamname"] 我使用了这个:

json_data = request.get_json(force=True) 

value = json_data["myparamname"]
于 2016-03-18T11:05:01.110 回答
-3

登录.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 %}

表格.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")

然后在您的视图中导入 signinform 并像这样创建您的登录方法

@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/

于 2013-12-03T14:12:05.290 回答