Django给类视图添加装饰器

# urls.py
    path('book_list/', views.BookListView.as_view()),
    path('login/', views.login, name='login'),

    
# views.py
def my_decorator(func):
    def wrapper(request, *args, **kwargs):
        if request.GET.get('username'):
            return func(request, *args, **kwargs)
        else:
            return redirect(reverse('login'))
    return wrapper

@method_decorator(my_decorator, name='dispatch')
class BookListView(ListView):
    model = Book
    template_name = 'book_list.html'
    context_object_name = 'books'
    paginate_by = 10
    ordering = 'id'
    page_kwarg = 'page'

    def get_context_data(self, **kwargs):
        context = super(BookListView, self).get_context_data(**kwargs)
        context['user'] = 'Yakult'
        print(context)
        return context
    
    def get_queryset(self):
        return Book.objects.filter(id__lte=20)

直接访问 [http://127.0.0.1:8000/CBV/book_list/](http://127.0.0.1:8000/CBV/book_list/) 会重定向到login界面

如果[http://127.0.0.1:8000/CBV/book_list/?username=1](http://127.0.0.1:8000/CBV/book_list/?username=1) get请求中带有username参数就可以访问成功
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容