2016-09-29 11 views
1

私はフラスコ重量を持っています。インスタンス化されたルートでフォームを検証できます。しかし、私は別のルートからそれを検証したい。セッション変数を使用せずに、私は他のルートからフォームオブジェクトにアクセスできる他の方法はありますか?別のルートでのフォームバリデーションFlask

form_class.py

class Fruit (Form): 
    Fruit = SelectField (choices = [ (0,"Select Fruit"), (1,'Apple'), (2,'Grape'), (3,'Orange') ], coerce = int, id="Fruit", validators = [Required()]) 

views.py

<form action="" method="POST"> 
     {{ form.hidden_tag() }} 
     {{form.Fruit}} 
     {{form.Fruit.errors}} 
     <input type = "submit"> 
</form> 

上記コードW

@app.route('/fruit', methods = ['GET', 'POST']) 
def fruit(): 
    form = Fruit() 
    if form.validate_on_submit(): 
     return render_template("output.html") 
    return render_template("name.html", form = form) 

名.html orkは完全にうまくいった。しかし、私は以下のようなことをしたい:

@app.route('/fruit') 
def fruit(): 
    form = Fruit() 
    '''if form.validate_on_submit(): 
     return render_template("output.html")''' 
    return render_template("name.html", form = form) 

@app.route('/fruit_submit', methods = ['GET', 'POST']) 
def fruit_submit(): 
    print request.form 
    if form.validate_on_submit(): 
     return render_template("output.html") 

私は上記のコードを試して、次のエラーが表示されます。

NameError: global name 'form' is not defined 
+0

とフルーツクラスを呼び出す必要があります。 1の一部として定義された変数は別の変数には存在しません。また、それはPythonでスコープがどのように機能するかではありません。ある関数で定義された変数は、ネストされていない別の関数内では使用できません。単に 'form = Fruit()'を 'fruit_submit'に追加すると、すべて設定されます。 – dirn

+0

'form = Fruit()'は 'fruit_submit'に再定義されますか? @dirn – wonder

+0

あなたは何も再定義していません。 'form'は' fruit_submit'で定義されていません。それは[NameErrorの意味](https://docs.python.org/3/library/exceptions.html#NameError)です。 'fruit_submit'の中で' form'という名前のものを使いたい場合は、それを定義する必要があります。 – dirn

答えて

0

あなたはそれぞれの要求が一意であるのRequest.Form

@app.route('/fruit_submit', methods = ['GET', 'POST']) 
def fruit_submit(): 
    print Fruit(request.form) 
    if Fruit(request.form).validate_on_submit(): 
     return render_template("output.html") 
+0

'Fruit(request.form).validate_on_submit()'にする必要があります。編集してください。私は答えを受け入れる。ありがとうございました。 – wonder

+0

okですが、validate_on_submit()はすでに次の行にあります。 – SumanKalyan

関連する問題