概述
在Django(四) View基础之函数视图中,通过在app/views.py中定义一个函数来表示一个视图,获取用户的请求并进行响应,这种方式的最大缺点是重用性差,因此,除了通过函数来定义一个视图之外,还可以通过类来定义一个视图。
和函数视图相比,基于类的视图有以下两个特点:
- 1.HTTP请求通过特定的方法处理,不需要通过条件语句判断。比如如果是函数视图:
from django.http import HttpResponse
def my_view(request):
if request.method == 'GET':
# <view logic>
return HttpResponse('result')
如果使用类视图:
from django.http import HttpResponse
from django.views import View
class MyView(View):
def get(self, request):
# <view logic>
return HttpResponse('result')
- 2.由于Python支持多继承,通过mixins可以增强复用性。
Django中提供了多种通过视图API,如TemplateView、RedictView、ListView,它们的父类都是View,通过继承这些类,覆盖类中的属性可以提供新的值或方法。
由于在请求时,url解析器会将请求和参数发送到一个方法中进行。因此,每个类视图都带有一个as_view()
方法,用于将类视图转换为一个可调用函数,在配置url时需要使用as_view()
方法:
urlpatterns = [
path(