2016-10-08 3 views
0

は私が書いた:/auth/confirm/<token>なぜFlaskのurl_for()関数がこのエラーを生成しましたか?私は私の最初のテンプレート(a.html)でフラスコを使用する場合、

しかし別で:{{url_for('auth.forget', token=token, _external=True)}}

それが私に与えた

{{url_for('auth.confirm', token=token, _external=True)}} 

それは右のサイトを与えましたこのようなサイトは /auth/forget?token=<token>

どのような違いがありますか?ここ

コード:

@auth.route('/forget', methods=['GET', 'POST']) 
def forget(): 
form=ForgetPasswordForm() 
if form.validate_on_submit(): 
    user=User.query.filter_by(email=form.email.data).first() 
    if user: 
     token=user.generate_forget_token() 
     send_email(user.email, 'Reset your password', 'auth/email/forget', token=token) 
     return redirect(url_for('main.index')) 
    flash("Email is not exist") 
return render_template('auth/forget.html',form=form) 

@auth.route('/forget/<token>', methods=['GET', 'POST']) 
def forget_reset(token): 
try: 
    email=User.confirm_forget(token) 
except: 
    return render_template('404.html') 
form=PasswordOnlyForm() 
if form.validate_on_submit(): 
    user=User.query.filter_by(email=email).first() 
    user.password=form.password.data 
    db.session.add(user) 
    db.session.commit() 
    flash('Succeed, now login!') 
    return redirect('auth/login') 
return render_template('auth/PasswordOnly.html',form=form) 

答えて

1

基礎となる機能は、異なるURLを期待しています。第二に

@app.route('/auth/confirm/<token>') 
def confirm(token): 

、トークンが指定されていないので、クエリパラメータとして渡された:最初のケースで

は、フラスコルーティングデコレータは、のように見えます。

@app.route('/auth/forget/') 
def forget(): 

また、どの機能を呼び出すかについても注意する必要があります。上の例では、2つの異なる動作を持つforgetforget_resetの2つの機能があります。

@app.route('/auth/forget/') 
def forget(): 
    pass 

@auth.route('/forget/<token>', methods=['GET', 'POST']) 
def forget_reset(token): 
    pass 

ここでは、これらを少しずつ呼びます。あなたは忘れ呼び出す場合:

<a href="{{url_for('forget', token='hello')}}">Calling Forget</a> 

http://127.0.0.1:5000/forget?token=hello 

そして、あなたがforget_reset呼び出す場合:

<a href="{{url_for('forget_reset', token='hello')}}">Calling Forget Reset</a> 

http://127.0.0.1:5000/forget/hello 
+0

を私は確かに '' を書いてきたが、それは動作しませんか? –

+0

ありがとう!私はこれら2つのエンドポイントの名前を間違えた。 –

関連する問題