django-类视图

函数视图

以函数的方式定义的视图是函数视图,函数视图便于理解。但是对于处理多种不同的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")

 

上一篇:django-apscheduler 实现定时任务详解


下一篇:pytest不是内部命令