为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

元芳怎么了 2023-05-23 15:00:56
我能做些什么来替换 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'))
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

要在登录时对用户进行身份验证,您可以这样做:


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 条件!



查看完整回答
反对 回复 2023-05-23
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

你必须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():

    #...


查看完整回答
反对 回复 2023-05-23
  • 2 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信