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/ 会重定向到login界面

如果http://127.0.0.1:8000/CBV/book_list/?username=1 get请求中带有username参数就可以访问成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django中有两种常见的视图编写方式视图和函数视图。它们在实现方式和使用方法上有一些差异,同时也有各自的优点。 视图(Class-based Views)是基于视图,通过继承Django提供的基础来编写视图。而函数视图(Function-based Views)则是基于函数的视图,直接定义一个函数来处理请求。 下面是视图和函数视图的一些差异和优点对比: 1. 实现方式:视图通过继承基础来编写,而函数视图直接定义一个函数来处理请求。视图通常需要定义多个方法来处理不同的HTTP请求方法(如GET、POST等),而函数视图可以在同一个函数中处理多个请求方法。 2. 代码复用:视图可以通过继承和方法重写实现代码的复用,可以在基础中定义通用的逻辑和属性,子只需要关注特定的逻辑即可。函数视图需要手动实现代码的复用。 3. 可读性和维护性:视图通常更具可读性,代码结构清晰,逻辑明确,便于维护和扩展。函数视图则更加简洁,适合处理简单的请求逻辑。 4. 功能扩展:视图提供了更多的功能扩展选项,例如可以通过混合(Mixins)来添加额外的功能,可以使用装饰器来修改或扩展视图行为。函数视图相对简单,扩展功能的方式相对有限。 5. 视图适用于复杂场景:当需要处理复杂的业务逻辑、多个请求方法、权限验证、表单处理等场景时,视图更加灵活和方便。 总体来说,视图适用于复杂的场景和功能扩展,提供了更多的灵活性和可读性;而函数视图适合处理简单的请求逻辑,代码相对简洁。选择使用哪种视图方式取决于具体的需求和开发习惯。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值