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返回了一个空的
1 2 3 4 5 | @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': request.form['username'] ... |
我现在真的不想学习其他库(WTForms),并且我正在使用引导程序,因此这会增加头痛。使用Flask / HTML在这里看不到什么?
我遇到了这个问题,但这是因为我忘记为输入元素分配
即
我的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'] |
我还需要确保我正在使用
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/