栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Flask项目】装饰器实现登录状态验证 # 13

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Flask项目】装饰器实现登录状态验证 # 13

装饰器:

装饰器是 Python 的一个重要部分。

简单地说:他们是修改其他函数的功能的函数, 在不改变原有函数功能基础的上加装功能。

装饰器蓝本:
from functools import wraps
def decorator_name(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        if not can_run:
            return "函数不会执行"
        return f(*args, **kwargs)
    return decorated
 
@decorator_name
def func():
    return("函数执行了")
 
can_run = True
print(func())
# Output: 函数执行了
 
can_run = False
print(func())
# Output: 函数不会执行
@wraps

接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。这可以让我们在装饰器里面访问在装饰之前的函数的属性

装饰器实现登录状态验证:
from flask import session, current_app, abort, g
from info.models import User
from functools import wraps

def check_login(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        # 1.获取session信息(id)
        id = session.get("id")
        user = None

        # 2.利用id查询数据库中信息
        try:
            user = User.query.filter_by(id=id).first()
        except Exception as e:
            current_app.logger.error(e)
            abort(404)

        g.user = user

        return func(*args, **kwargs)
    return wrapper

在其它函数开始需要验证登录状态时,只需要:

from . import blue_news
from info.utils.comment import check_login  # 导入编写的装饰器


@blue_news.route('/detail/')
@check_login
def detail(nid):
    pass

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350892.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号