我正在学习Flask并尝试构建一个非常简单的应用程序,其中很少有部分创建新用户并搜索现有用户。创建/注册新用户部分工作正常,但由于某种原因搜索功能未按预期工作,因为表单未提交。我试图查看我想到的每一个可能的情况,搜索Stackoverflow但是无法修复它。
注册功能代码:
forms.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')
views.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)
register.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 %}
userSearch.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 %}
我现在很无能,有人可以帮帮我吗?
答案 0 :(得分:3)
最有可能的原因是userSearch.html
中没有添加名称字段。在UserSeacrh
类中,字段name
有一个验证程序DataRequired
,最有可能产生问题。如果您只想通过电子邮件进行搜索,只需删除name
课程中的UserSeacrh
字段。
顺便提一下UserSeacrh
中的拼写错误 - 它应该是UserSearch
。但在你的情况下,这不是问题。
答案 1 :(得分:0)
我认为您需要为表单指定操作,即将完成的表单POST到哪个URL。
<form action="" method="post">
答案 2 :(得分:0)
我能够用Nurzhan&#39;解决这个问题。通过从forms.py中删除UserSearch表单中的名称字段来提示。