# 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/ 会重定向到login界面
如果http://127.0.0.1:8000/CBV/book_list/?username=1 get请求中带有username参数就可以访问成功