2017-07-08 20 views
0

データベースに保存してからアプリに表示するには、ユーザー入力が必要です。 ユーザーの入力を空白のままにした場合、エラーメッセージを表示する必要があります。if文が機能しないのはなぜですか?

エラーメッセージが表示されている状態で、問題が発生しています。 ユーザーの入力が空白の場合、空白の投稿はdbに保存され、エラーメッセージを表示するのではなく内容が表示されます。

私は、Python、Jinja2の、フラスコ、HTML

感謝を使用しています!

if request.method == 'POST': 

     blog_title = str(request.form['title']) 
     blog_body = str(request.form['body']) 

     title_error = '' 
     body_error = '' 

     if len(blog_title) == 0: 
      title_error = 'Please give your blog a title' 
      return title_error 

     if len(blog_body) == 0: 
      body_error = "Please give your blog some content" 
      return body_error 
     else: 
      new_blog = Blog(blog_title, blog_body) 
      db.session.add(new_blog) 
      db.session.commit() 

      blog_id = new_blog.id 

      return redirect(url_for('blogs', id=blog_id)) 

    else: 
     return render_template('/newpost_form.html') 
+0

よく空の文字列( 'title_error')を返していますか? – patrick

+2

@patrick彼は 'return'の直前で文字列を再定義します。しかし、彼は本当にそれをまったく正直に「 '」と定義する必要はありません。 – pstatix

+0

@pstatix私はあなたが正しいと思う、最初の場合は "elif"のために続かなければならない? –

答えて

1

私はFlask-WTFを統合検討します。私はそのような形のフラスコを作るだけです。

forms.py

from flask_wtf import FlaskForm 
from wtf.fields import StringField, TextAreaField, SubmitField 
from wtf.validators import DataRequired 

class NewBlogForm(FlaskForm): 
    title = StringField('Title', validators=[DataRequired(message='one')]) 
    body = TextAreaField('Body', validators=[DataRequired(message='two')]) 
    submit = SubmitField('Save') 

routes.py

from forms import NewBlogForm 

@app.route('/newpost', methods=['GET', 'POST']) 
def new_post(): 
    form = NewBlogForm() 
    if form.validate_on_submit(): 
     blog = Blog(form.title.data, form.body.data) 
     db.session.add(blog) 
     db.session.commit() # should have try block to catch any errors 
     return redirect(url_for('blogs', id=blog.id)) 
    return render_template('newposts_form.html', form=form) 

newposts_form.html

<form> 
    <ul> 
    {% for error in form.errors %} 
     <li>{{ error }}</li> 
    {% endfor %} 
    </ul> 
    {{ form.csrf_token }} 
    {{ form.title.label }}{{ form.title }} 
    {{ form.body.label }}{{ form.body }} 
    {{ form.submit }} 
</form> 
で作業が容易になります検証ツールの多くを提供します

Flask-Bootstrapを使用している場合は、wtf formsをサポートし、エラーを本当にきれいに表示します。

0

次の操作を行い、変数の値をreasingingされています

if request.method == 'POST': 

    blog_title = str(request.form['title']) 
    blog_body = str(request.form['body']) 

    if len(blog_title) == 0: 
     return 'Please give your blog a title' 
    elif len(blog_body) == 0: 
     return "Please give your blog some content" 
    else: 
     new_blog = Blog(blog_title, blog_body) 
     db.session.add(new_blog) 
     db.session.commit() 

     blog_id = new_blog.id 

     return redirect(url_for('blogs', id=blog_id)) 

else: 
    return render_template('/newpost_form.html') 
+0

これを試した後、タイトルが表示されるというエラーメッセージが表示されます(何らかの理由で新しいページに表示されます)。私は身体のためのエラーメッセージを得ないし、人体のない人口のあるタイトルをデータベースに保存します。 – TJH

+0

@TJHまあ、別の問題です。私の例としてStringを返すことはできません。それらも例としてあまりにも...あなたはそれぞれのケースに対して別のテンプルテをレンダリングする必要があります –

関連する問題