函数视图
以函数的方式定义的视图是函数视图,函数视图便于理解。但是对于处理多种不同的HTTP的请求时,便需要在一个视图函数中编写不同的业务逻辑,代码可读性和复用性都不佳。
1 def register(request): 2 """处理注册""" 3 4 # 获取请求方法,判断是GET/POST请求 5 if request.method == 'GET': 6 # 处理GET请求,返回注册页面 7 return render(request, 'register.html') 8 else: 9 # 处理POST请求,实现注册逻辑 10 return HttpResponse('这里实现注册逻辑')
类视图
在django中也可以使用类来定义一个视图,称为类视图
使用类视图可以将视图对应的不同请求以类中不同方法来区别定义。
1 from django.views.generic import View 2 3 class RegisterView(View): 4 """类视图:处理注册""" 5 6 def get(self, request): 7 """处理GET请求,返回注册页面""" 8 return render(request, 'register.html') 9 10 def post(self, request): 11 """处理POST请求,实现注册逻辑""" 12 return HttpResponse('这里实现注册逻辑')
· 类视图相对于函数视图有更高的复用性,如果有其它的地方需要用到某个类试图的某个特定逻辑,可以直接继承该类视图
· 定义类视图需要继承自Django提供的父类View,可使用from django.views.generic import View或者from django.views.generic.base import View导入\
类视图配置路由的方式
配置路由时,使用类视图的 as_view() 方法添加
1 urlpatterns = [ 2 # 函数视图:注册 3 # url(r'^register/$', views.register, name='register'), 4 # 类视图:注册 5 url(r'^register/$', views.RegisterView.as_view(), name='register'), 6 ]
类视图支持多继承
1 class CenterView(LoginRequireMixin,View): 2 3 def get(self,request): 4 return HttpResponse("OK") 5 6 def post(self,request): 7 return HttpResponse("OK")