前边进行视图处理都使用的是函数来进行的,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()),
如果类中函数需要加进行如登录验证的操作,可以在方法前加
@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)