Django框架学习19--视图类CBV

前边进行视图处理都使用的是函数来进行的,python是一个面向对象的语言,使用类来进行视图处理在Django中也应该可以。

CBV(class base views) 就是在视图里使用类处理请求,这是面向对象的编程方式

1.定义类代替视图函数,自定义的类必须继承自View父类

2.重写父类的各种请求方法,在方法中对请求进行处理

3.在 urls.py 路由系统中必须使用 Myview.as_view() 替代视图函数

@method_decorator(login_required, name='get')
@method_decorator(login_required, name='post')
class Myview(View):
    # def dispatch(self, request, *args, **kwargs):
    #     print("接收请求前处理")
    #     if request.method=="GET":
    #         return self.get(request)

    @method_decorator(login_required)
    def get(self, request):
        context = {
            "code": 0,
            "msg": ""
        }
        print("进入get请求处理函数")
        # return JsonResponse(context)
        return HttpResponse("收到GETTTTT请求")

    def post(self, request):
        return HttpResponse("收到post请求")
url(r'^cbv/$',views.Myview.as_view()),

Django框架学习19--视图类CBV_第1张图片

如果类中函数需要加进行如登录验证的操作,可以在方法前加

@method_decorator(login_required)

或者直接在类前加

from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required

@method_decorator(login_required, name='get')
@method_decorator(login_required, name='post')

dispatch方法的使用 ,可以在进行处理前进行一些操作,如果重写了dispatch方法,必须使用return返回对浏览器的响应

def dispatch(self, request, *args, **kwargs):
     print("接收请求前处理")
         if request.method=="GET":
             return self.get(request)

 

你可能感兴趣的:(Django框架学习)