基于类的视图怎么实现装饰器
基于类的视图实现装饰器,通常方式有2种:
1、直接在URL中配置装饰器
2、利用method_decorator转换器来实现
直接上源码!!
第一种实现方式:
from django.utils.decorators import never_cache urlpatterns += [ path('course-list/', never_cache(views.CourseListView.as_view()), name='course-list'), ]
第二种实现方式:
#views.py from django.views.generic import ListView from imooc.models import Course from django.contrib.auth.models import User from utils.cache import never_cache from django.utils.decorators import method_decorator @method_decorator(never_cache,name='dispatch') #使用method_decorator将装饰器包裹起来,同时,name参数是必须的,dispatch支持所有请求类型,包含get、post等 class CourseListView2(ListView): model = Course context_object_name = 'courses' template_name = 'imooc/cache/cache.html' def get_queryset(self): qs=super().get_queryset() user=User.objects.get(username='admin') return qs.filter(user=user) #urls.py urlpatterns += [ path('course-list/', views.CourseListView2.as_view(), name='course-list'), ]
评论 2
不方便重新编辑啊
@method_decorator(never_cache,name='dispatch') ,如果只想对get使用该装饰器,则,name='get'即可,是不是很简单