当我使用flask时,在我的第一个模板(a.html)中写道:
{{url_for('auth.confirm', token=token, _external=True)}}
它提供了正确的网站:/auth/confirm/<token>
但在另一个:{{url_for('auth.forget', 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)
答案 0 :(得分:1)
基础功能期待不同的网址。
在第一种情况下,烧瓶布线装饰器看起来像:
document.write("Hello world <br> How are you?");
在第二个中,未指定令牌,因此作为查询参数传递。
@app.route('/auth/confirm/<token>')
def confirm(token):
您还需要注意要拨打的功能。在上面的示例中,您有两个功能:@app.route('/auth/forget/')
def forget():
和forget
,它们有两种不同的行为。
forget_reset
现在你用不同的方式打电话给他们。如果你打电话给忘记:
@app.route('/auth/forget/')
def forget():
pass
@auth.route('/forget/<token>', methods=['GET', 'POST'])
def forget_reset(token):
pass
如果你打电话给forget_reset:
<a href="{{url_for('forget', token='hello')}}">Calling Forget</a>
http://127.0.0.1:5000/forget?token=hello