python - 为什么验证不适用于表单请求?

标签 python flask jinja2 flask-wtforms

我正在学习flask并做了一个小应用程序。现在我正在尝试学习form。我使用了一个简单的代码来验证 name 请求,当 field 保持为空时,它应该会给出错误。但它并没有给出一个。

主文件:

from flask import Flask, render_template
from flask.ext.moment import Moment
from flask.ext.wtf import Form
from wtforms import StringField, SubmitField, validators

import requests
import json
from datetime import datetime

app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcd'
moment = Moment(app)


class Nameform(Form):
    name = StringField("whats your name?", [validators.Required()])
    submit = SubmitField('submit')


@app.route('/')
@app.route('/index')
def index():

    api_call = requests.get('https://api.stackexchange.com/2.2/users/moderators?order=desc&sort=reputation&site=stackoverflow')  # api call to stack for user with highest scores in des order

    var_1 = json.loads(api_call.text)

    var_2 = [{'link': value['link'], 'name': value['display_name'], 'user_id': value['user_id']} for value in var_1['items']]

    return render_template('index.html', posts=var_2, current_time=datetime.utcnow())


@app.route('/user/<id>/<user_name>')
def user(id, user_name):
    print id
    api_call = requests.get('https://api.stackexchange.com//2.2/users/'+id+'/reputation?site=stackoverflow')  # api call for reputation of click user

    var_1 = json.loads(api_call.text)
    return render_template('reputation.html', result=var_1, user_name=user_name)


@app.route('/test', methods=['GET', 'POST'])
def user_form():
    name = None
    form = Nameform()
    if form.validate_on_submit():
        name = form.name.data
        form.name.data = ''
    return render_template('test_form.html', form=form, name=name)



if __name__ == '__main__':
    app.run(debug=True)

渲染模板:

<div class="page-header">
<h1>Hello, {% if name!= None %}{{ name }}{% else %}Stranger{% endif %}!</h1>
</div>
<form method=post>
{{ form.name.label }} {{ form.name() }}
{{ form.submit() }}
</form>

为什么它没有抛出任何错误?当字段保留为空时

最佳答案

您可以使用form.errors呈现错误消息。请注意,您还缺少 CSRF token ,这是验证所必需的,因为您没有禁用 WTF_CSRF_ENABLED,因此我添加了 {{ form.csrf_token }} 。请参阅CSRF Protection .

<div class="page-header">
<h1>Hello, {% if name!= None %}{{ name }}{% else %}Stranger{% endif %}!</h1>
</div>
{% for field in form.errors %}
{% for error in form.errors[field] %}
    <div class="error">{{ error }}</div>
{% endfor %}
{% endfor %}
<form method=post>
{{ form.csrf_token }}
{{ form.name.label }} {{ form.name() }}
{{ form.submit() }}
</form>

关于python - 为什么验证不适用于表单请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35527722/

相关文章:

python - iOS - 如何使用没有命名空间的 flask-socketIO 连接到 flask 服务器?

flask - 织物 + DigitalOcean : unvisible ENVIRONMENT VARIABLE?

javascript - Jquery/Ajax/CSS 在使用 Ajax 提交表单后显示/隐藏 div

python - pytest:如何制作专用测试目录

python - 在 Python 中跳过代码行?

python - 无法在 flask 制作的网页中设置背景图片

python - html 中的 if 语句(使用 jinja2) - 我应该在哪里编辑才能使其工作?

python - 如何在youtube api中跨多个 channel 搜索内容?

python - 更改请求中的 url (Python)

python - Flask-WTForms:如何检查是否需要一个字段?