首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CBV加装饰器

CBV加装饰器

作者头像
HammerZe
发布2022-03-25 18:46:23
发布2022-03-25 18:46:23
29900
代码可运行
举报
文章被收录于专栏:Hammer随笔Hammer随笔
运行总次数:0
代码可运行

CBV加装饰器

我们知道在函数上如何加装饰器,那么在类上如何加装饰器呢? 下面写一个登录校验示例:

导入:from django.utils.decorators import method_decorator

代码语言:javascript
代码运行次数:0
运行
复制
'''装饰器'''
def auth(func):
    def inner(request,*args, **kwargs):
        #登录校验
        if request.session.get('is_login'):  # 通过获取is_login来判断是否登录
            res = func(*args, **kwargs)  # 装饰器核心,接收参数,返回值
            return res
        else:
            return redirect('/login')   # 校验成功重定向到login
    return inner  # 必须返回inner
代码语言:javascript
代码运行次数:0
运行
复制
from django.views import View
from django.utils.decorators import method_decorator

@method_decorator(auth,name='get') #给get请求加装饰器,还可以给post加
class Index(View):
	 @method_decorator(auth)
	def dispatch(self,request,*args,**kwargs):
		return super().dispatch(request,*args,**kwargs)
    # @method_decorator(auth)
    def get(self, request, *args, **kwargs):
        return HttpResponse('index')

    def post(self, request, *args, **kwargs):
        return HttpResponse('post_index')

总结

代码语言:javascript
代码运行次数:0
运行
复制
1-cbv加装饰器可以加在类上:
    @method_decorator(auth,name='post') # 给post请求加装饰器
2-可以加在方法上:
    @method_decorator(auth)
    def get(self, request, *args, **kwargs):
        pass
3-加在方法和类上
@method_decorator(auth,name='get')
class Index(View):
	 @method_decorator(auth)
	def dispatch(self,request,*args,**kwargs):
		return super().dispatch(request,*args,**kwargs)

区别是加在post或者get方法上不需要写name参数,如果加在视图类上需要写name参数,共三种方式

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CBV加装饰器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档