2017-05-26 80 views
2

我在学习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

什么是错误?当你按下搜索按钮时,你会看到什么? – Nurjan

+0

完全没有错误,只是它根本不执行任何操作。 – Rohit

+0

看看我的答案。这可能会帮助你。您可能需要删除UserSearch类中的'name'字段。 – Nurjan

回答

1

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

顺便说一句,在UserSeacrh有一个错字 - 它应该是UserSearch。但在你的情况下,这不是问题。

0

我认为你需要为你的表单指定动作,即将完成表单发送到哪个URL。

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

+0

他已经在模板中使用了他的形式。 – Nurjan

+0

啊,很好找。感谢您的更正,并回答您的问题。我也从中学到了东西。 – Katie

0

我能够使用Nurzhan的提示通过从Forms.py的UserSearch表单中删除名称字段来解决此问题。