01.类视图
1.1 函数视图弊端
- 以函数的方式定义的视图称为函数视图,函数视图便于理解。
- 但是遇到一个视图对应的路径提供了多种不同HTTP请求方式的支持时
- 便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳。
1 | def register(request): |
1.2 类视图引入
-
在Django中也可以使用类来定义一个视图,称为类视图。
-
使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义。
-
类视图的好处
- 1)代码可读性好
- 2)类视图相对于函数视图有更高的复用性, 如果其他地方需要用到某个类视图的某个特定逻辑,直接继承该类视图即可
-
类视图原理
- 1)调用流程 as_view–>view–>dispatch
- 2)getattr(‘对象’,‘字符串’)
1 | from django.views import View |
02.类视图添加装饰器
-
1、 dispatch是父类中用来反射的函数,找对应的函数(比对应函数先执行)
-
2、 比如你发送post请求就可以通过dispatch找到对应的post函数进行处理,get就会找到get函数处理
-
添加路由
1 | from django.urls import path, re_path |
2.1 定义一个装饰器
1 | def my_decorator(func): |
2.2 为特定请求方法添加装饰器
-
在类视图中使用为函数视图准备的装饰器时,不能直接添加装饰器
-
需要使用method_decorator将其转换为适用于类视图方法的装饰器。
-
method_decorator装饰器使用name参数指明被装饰的方法
1 | from django.shortcuts import HttpResponse |
2.3 为特定请求方法添加装饰器
1 | from django.shortcuts import HttpResponse |
03.类视图Mixin扩展类
-
使用面向对象多继承的特性,可以通过定义父类(作为扩展类)
-
在父类中定义想要向类视图补充的方法,类视图继承这些扩展父类,便可实现代码复用。
-
定义的扩展父类名称通常以Mixin结尾。
1 | class ListModelMixin(object): |
__END__