类视图
1.类视图的引入
以函数的方式定义的视图成为函数视图,函数视图便于理解。但是遇到了一个视图对应的路径提供了多种不同HTTP请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性和复用性并不好。
def register(requqest):
if request.method == 'GET':
return render(request,'register.html')
else:
return HttpResponse("这里实现注册的逻辑)
在Django中也可以使用类来定义一个视图,称为类视图。
使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义,如
from django.views.generic import View
class RegisterView(View):
def get(self,request):
return HttpResponse("这是GET请求方式的页面!")
def post(self,request):
return HttpResponse("这是POST请求方式的页面!")
类视图的好处:
- 代码可读性好
- 类视图相对于函数视图有更高的复用性,比如类继承
2.类视图的使用
定义类视图需要继承Django提供的父类View,可使用from django.views.generic import View 导入,如上段代码所示
配置路由的时候,使用类视图的as_view()方法来添加。
urlpatterns=[
url(r'^register/$',views.Register.as_view())
]
2.1l类视图的原理
可以通过在as_view上按ctrl+b进入底层代码查看
其实其中的原理就是先构造一个对象,然后加if判断条件 if request.mtthod =="GET"或者“POST”方式然后通过对象分别调用不同的方法。