如果替换else,我该怎么办。我将在几个地方需要这种情况。
@blueblue.route('/', methods=['GET', 'Post'])
#
def deactivate_trainer():
if current_user.is_authenticated and current_user.account_type == 'su':
form = ActivateDeactivateTrainer
return render_template('x.html', form=form)
else:
return redirect(url_for('blueblue.login'))
答案 0 :(得分:2)
要在登录时验证用户身份,可以执行以下操作:
from flask import redirect, render_template, request, session
from functools import wraps
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not (current_user.is_authenticated and current_user.account_type == 'su'):
return redirect(url_for('blueblue.login'))
return f(*args, **kwargs)
return decorated_function
这为登录用户定义了一个单独的装饰器。
使用装饰器就像添加一条简单的行一样简单:
@blueblue.route('/', methods=['GET', 'Post'])
@login_required
def deactivate_trainer():
form = ActivateDeactivateTrainer
return render_template('x.html', form=form)
瞧!您不必再使用那些烦人的if-else条件!
访问here了解更多信息。
答案 1 :(得分:1)
您必须使用functools.wraps()
在烧瓶中处理此问题
这是我编辑您的代码的方式:
from functools import wraps
from flask import redirect, url_for
def my_decorator(function):
@wraps(function)
def decorated_function(*args, **kwargs):
if current_user.is_authenticated and current_user.account_type == 'su':
return function(*args, **kwargs)
else:
return redirect(url_for('blueblue.login'))
您可以通过这种方式使用装饰器
@blueblue.route('/', methods=['GET', 'Post'])
@my_decorator
def deactivate_trainer():
#...
您还可以看到Flask documentation以获得更多信息