2017-05-26 9 views
2

私はFlaskを勉強しており、新しいユーザーを作成して既存のユーザーを検索する非常に単純なアプリケーションを構築しようとしています。新しいユーザーの作成/登録の部分は正常ですが、何らかの理由でフォームが送信されないため、検索機能が期待どおりに機能していません。私は思ったすべての可能なケースを見てみましたが、Stackoverflowも検索しましたが、修正することはできませんでした。Flaskフォームが投稿されていません

登録機能のためのコード:

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クラスで削除してください。

ところで、UserSeacrhにはタイプミスがあります。それはUserSearchである必要があります。しかし、あなたの場合、それは問題ではありません。

0

あなたのフォームにアクションを指定する必要があると思います。完成したフォームをPOSTするためのURLです。

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

+0

彼は既にテンプレートの形でそれを持っています。 – Nurjan

+0

ああ、良い発見。訂正していただきありがとうございます。私もそれから学んだ。 – Katie

0

Nurzhanのヒントを使用して、これを解決するには、forms.pyのUserSearchフォームから名前フィールドを削除します。

関連する問題