类视图
学习目标:
知道什么是类视图
能够调用类视图
类视图引入
在 Django 中, 以函数的方式定义的视图称为 函数视图 也可以使用类来定义一个视图,称为 类视图
函数视图遇到一个视图对应的路径提供了多种不同 HTTP 请求方式的支持时
便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳
例如:
def register(request):
"""处理注册"""
# 获取请求方法,判断是 GET/POST 请求
if request.method == 'GET':
# 处理 GET 请求,返回注册页面
return HttpResponse('get部分数据返回')
else:
# 处理 POST 请求,实现注册逻辑
return HttpResponse('post部分数据返回')
使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义。如下所示
from django.views.generic import View
class RegisterView(View):
"""类视图:处理注册"""
def get(self, request):
"""处理 GET 请求,返回注册页面"""
print('RegisterView get')
return HttpResponse('RegisterView get方法')
def post(self, request):
"""处理 POST 请求,实现注册逻辑"""
print('RegisterView post')
return HttpResponse('RegisterView post方法')
类视图的好处:
- 代码可读性好
- 类视图相对于函数视图有更高的复用性, 如果其他地方需要用到某个类视图的某个特定逻辑,直接继承该类视图即可
类视图使用
定义类视图需要继承自 Django 提供的父类 View ,可使用
from django.views.generic import View 或者 from django.views.generic.base import View
导入,定义方式如上所示。
注意 : 配置路由时,需要在类名后面增加 as_view( ) 函数
urlpatterns = [
# 视图函数:路由添加
# re_path(r'^register/$', views.register),
# 类视图:路由添加
re_path(r'^register/$', views.RegisterView.as_view()),
]
演示效果:
中间件测试
中间件测试
总结:
以类定义的视图, 我们成为类视图
类视图能够包含多个函数视图
类视图中的函数名称是规定死的请求方法名
类视图调用的时候, 子路由部分需要在类名后面添加 as_view( ) 才可以