基于类的视图怎么实现装饰器

基于类的视图实现装饰器,通常方式有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