Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python WTForms可以';似乎无法验证SelectField框_Python_Flask_Wtforms_Flask Wtforms - Fatal编程技术网

Python WTForms可以';似乎无法验证SelectField框

Python WTForms可以';似乎无法验证SelectField框,python,flask,wtforms,flask-wtforms,Python,Flask,Wtforms,Flask Wtforms,我已经为员工创建了一个选择字段来选择他们的名字。 我的目标是,当用户没有选择他们的名字,而是离开选择“--”上的下拉框时,在这种情况下,我希望ValidationError然后打印它的消息。目前,当我测试这个时,没有打印任何内容 这是我的forms.py文件: from flask_wtf import Form from wtforms import StringField, BooleanField, SelectField from wtforms.validators import Da

我已经为员工创建了一个选择字段来选择他们的名字。 我的目标是,当用户没有选择他们的名字,而是离开选择“--”上的下拉框时,在这种情况下,我希望ValidationError然后打印它的消息。目前,当我测试这个时,没有打印任何内容

这是我的forms.py文件:

from flask_wtf import Form
from wtforms import StringField, BooleanField, SelectField
from wtforms.validators import DataRequired, Required, ValidationError 

class StaffNames(Form):
        staff = SelectField(
        'staff',
        choices=[("", "---"), ('1', 'John Jones'), ('2', 'Chris Hughes'), ('3', 'Lyn Fox')],
        )
        def validate_staff(form, field):
                if field.data is "---":
                        raise ValidationError("Sorry, you havn't chosen a staff name")
这是我的view.py文件:

from flask import render_template, flash, redirect
from app import app
from .forms import StaffNames

@app.route('/')
@app.route('/index', methods=['GET', 'POST'])
def index():
    form = StaffNames()
    if form.validate_on_submit():
        return redirect('/results')
    return render_template('index.html',
                           title='RA Index Search',
                           form=form)
以下是与此表单相关的my index.html:

<!-- extend base layout -->
{% extends "base.html" %}

{% block content %}
<center>
    <h1>Search</h1>
    <form action="" method="post" name="login">

        <p>{{ form.staff }} Select your name</p>
        <p><input type="submit" value="Search"></p>
    </form>

{% endblock %}

{%extends“base.html”%}
{%block content%}
搜寻
{{form.staff}}选择您的姓名

{%endblock%}
有人能看出我做错了什么,或者提出一个不会让我的大脑融化的替代方案吗!英雄联盟
谢谢

据我所知,您的代码中有两个错误:

  • 您需要在
    表单中包含一个值。在提交()时验证方法将始终返回False。还要确保将
    app.config['SECRET\u KEY']
    设置为某个值

  • 在验证方法中,检查SelectBox的数据属性是否为“---”。这永远不会发生,因为
    数据
    引用了您在
    选项列表中传递的元组的第一个值

  • 按以下方式更改您的
    validate_staff
    方法,您应该会没事:

    def validate_staff(form, field):
        if field.data == "":
            raise ValidationError("Sorry, you havn't chosen a staff name")
    
    class StaffNames(Form):
    
        staff = SelectField(
            'staff',
            choices=[
                ("", "---"), ('1', 'John Jones'), ('2', 'Chris Hughes'), ('3', 'Lyn Fox')],
            validators=[validate_staff],
        )
    
    注意:您需要将
    validate\u staff
    函数传递给StaffNames表单的validators列表,否则将永远不会触发验证。我相应地更改了上述代码。