DRF自定义装饰器


一、装饰器是什么?

在编写drf项目使用装饰器时,发现了一些小问题,因此记录下来以供以后参考。可以点击了解:装饰器decorator实现Django的访问和权限控制

二、DRF定义装饰器

1.自定义装饰器

DRF(Django REST Framework)定义装饰器有点不同,定义的装饰器需要@wrap装饰
my_decorator.py

from functools import wraps
from django.http import HttpResponse


# 判断是否有操作权限
def match_permission(func):
    @wraps(func)
    def permission(request, *args, **kwargs):
        userGroupId = request.request.session.get('userGroupId')
        if userGroupId == 0:
            return func(request, *args, **kwargs)
        else:
            return HttpResponse("你无权访问!")
    return permission


# 判断用户是否登录
def match_user(func):
    @wraps(func)
    def user(request, *args, **kwargs):
    	# requset获取的是整个ViewSet对象,request.request才能获取单个请求对象
        userName = request.request.session.get('userName')
        if userName:
            return func(request, *args, **kwargs)
        else:
            return HttpResponse("请先登录后再操作!")
    return user

2、使用

注意顺序@action一定是第一个,否则使用router自动生成路由的话会忽略该路由。

	from DV_project.my_decorator import match_user
	"""
        这样写会无法自动生成路由
        @match_user
        @action(methods=['GET'], detail=False)
    """
	# match_user不使用@wrap装饰会报错
    @action(methods=['GET'], detail=False)
    @match_user
    def loginOut(self, request):
        # 删除数据库存储的session和浏览器cookie
        request.session.delete(request.session.session_key)

        return Response({"status": "success"})
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值