关于python:Flask收到空表格

Flask receiving empty forms

我正在尝试为自己的学习在Flask中设置一个简单的表格。我有一个使用以下表单代码的login.html页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form action="{{ url_for('login') }}" method="post">
   
        <label for="username">Username</label>
       
            <input type="text" id="username" name="username" placeholder="Username">
       
   
   
        <label for="password">Password</label>
       
            <input type="password" id="password" name="password" placeholder="Password">
       
   
   
        <input class="btn" type="submit">
   
</form>

我正在使用类似以下的代码来接收它,但是Flask返回了一个空的request.form,所以我无法处理它。

1
2
3
4
5
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        request.form['username']
        ...

我现在真的不想学习其他库(WTForms),并且我正在使用引导程序,因此这会增加头痛。使用Flask / HTML在这里看不到什么?


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

我的HTML和Python如下所示

HTML

1
<input type="text" id="usernameTxtBx">

Python

1
request.form['usernameTxtBx']

我现在所做的:

HTML

1
<input type="text" name="username" id="usernameTxtBx">

Python

1
request.form['username']

我还需要确保我正在使用POST请求。 GET请求在我的python代码中给了我一个空字典。

OP均未犯这些错误。但这可能会帮助偶然发现此线程的人。


我遇到了这个问题。
一些工具(例如邮递员)或某些库或Web浏览器会以Flask无法识别为已发布值的方式发送数据。从我的angular来看,这是一个瓶颈问题。

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

How to send a JSON object using html form data

2-我不是使用以下方法获取参数:
值= request.form [" myparamname"]
我用这个:

1
2
3
json_data = request.get_json(force=True)

value = json_data["myparamname"]

login.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{% extends"layout.html" %}

{% block content %}
 
    Sign In

 {% for field in form.errors %}
{% for error in form.errors[field] %}
   
        Oops... {{error}}.
   
{% 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>

{% endblock %}

forms.py

1
2
3
4
  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并创建这样的登录方法

1
2
3
4
5
6
7
8
9
@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/