如何在烧瓶中创建装饰器?

我能做些什么来替换 if 和 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'))


元芳怎么了
浏览 141回答 2
2回答

守着星空守着你

要在登录时对用户进行身份验证,您可以这样做:from flask import redirect, render_template, request, sessionfrom functools import wrapsdef 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_requireddef deactivate_trainer():    form = ActivateDeactivateTrainer    return render_template('x.html', form=form)瞧!您不必再使用那些烦人的 if-else 条件!

慕婉清6462132

你必须functools.wraps()在烧瓶中使用它来处理这就是我编辑你的代码的方式:from functools import wrapsfrom flask import redirect, url_fordef 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_decoratordef deactivate_trainer():    #...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python