Flask 表单未提交

Roh*_*hit 5 python forms flask

我正在学习 Flask 并尝试构建一个非常简单的应用程序,其中几乎没有创建新用户和搜索现有用户的部分。创建/注册新用户部分工作正常,但由于某种原因,搜索功能无法按预期工作,因为表单未提交。我试图查看我想到的所有可能的情况,也搜索了 Stackoverflow,但无法修复它。

注册功能代码:

表格.py

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, length

class Register(FlaskForm):
    name = StringField('name', validators=[DataRequired(), length(min=1, max=30)])
    email = StringField('email', validators=[DataRequired()])
    submit = SubmitField('Register')

class UserSeacrh(FlaskForm):
    name = StringField('name', validators=[DataRequired()])
    email = StringField('email', validators=[DataRequired()])
    submit = SubmitField('Search')
Run Code Online (Sandbox Code Playgroud)

视图.py

@app.route("/register", methods=['GET', 'POST'])
def register():
    form = Register()
    if form.validate_on_submit():
        db.create_all()
        user = CreateUser(form.name.data, form.email.data)
        db.session.add(user)
        db.session.commit()
        flash('User {} created successfully'.format(form.name.data))
        return redirect(url_for("register"))
    return render_template("register.html", form=form, title='New User Registration')


@app.route("/search", methods=['GET', 'POST'])
def user_profile():
    form = UserSeacrh()
    if form.validate_on_submit():
        flash('{}'.format(user))
        return redirect(url_for("home"))
        #return render_template("users.html", users=user)
    return render_template("userSearch.html", form=form)
Run Code Online (Sandbox Code Playgroud)

注册.html

<!DOCTYPE html>

{% extends "base.html" %}

{% block body %}
    <form action="" method="post">
         {{ form.hidden_tag() }}
        <div>
            <h4>User Registeration</h4>
            <span>Name {{form.name}}</span>
             <span style="color: red">
                {% for error in form.name.errors %}
                    {{error}}
                {% endfor %}
            </span
            <span>Email {{form.email}}</span>
            <span style="color: red">
                {% for error in form.email.errors %}
                    {{error}}
                {% endfor %}
            </span>

        </div>
        {{form.submit()}}
    </form>

    {% with messages = get_flashed_messages() %}
        {% if messages %}
        <br/>
        <ul>
            {% for message in messages %}
                <li>{{message}}</li>
            {% endfor %}
        </ul>
        {% endif %}
    {% endwith %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

用户搜索.html

<!DOCTYPE html>

{% extends "base.html" %}

{% block body %}

    <form action="" method="post">
         {{ form.hidden_tag() }}
         <h4>User Search Form</h4>
        <div>
            <span>Email {{form.email}}</span>

            <span style="color: red">
                {% for error in form.email.errors %}
                    {{error}}
                {% endfor %}
            </span>
        </div>
        {{form.submit()}}
    </form>

    {% with messages = get_flashed_messages() %}
        {% if messages %}
        <br/>
        <ul>
            {% for message in messages %}
                <li>{{message}}</li>
            {% endfor %}
        </ul>
        {% endif %}
    {% endwith %}

{% endblock %}
Run Code Online (Sandbox Code Playgroud)

我现在一无所知,有人可以帮我吗?

Nur*_*jan 6

最有可能的原因是userSearch.html您没有添加名称字段。在UserSeacrh类中,该字段name有一个验证器DataRequired,这很可能会产生问题。如果您只想通过电子邮件进行搜索,只需删除类name中的字段即可。UserSeacrh

顺便说一句,其中有一个错字UserSeacrh- 应该是UserSearch。但就你而言,这不是问题。


小智 5

我认为您需要指定表单的操作,即将完成的表单发布到哪个 URL。

<form action="" method="post">