Django提供的class-base view
View:基础的View,实现了基于HTTP方法的分发逻辑,不同的请求方法会调用相应的方法,
即GET请求调用get方法,POST请求调用post方法
TemplateView:继承自View,可以直接用来返回指定的模板,实现了get方法,可以传递变量
到模板中来进行数据展示
DetailView:继承子View,实现了get方法,可以通过绑定某一个模板,用来获取单个实例的
数据
ListView:继承子View,实现了get方法,可以通过绑定模板来批量获取数据
View
基于类的视图具有一个 as_view()类方法,该方法返回一个函数,当请求到达匹配的URL时,可以调用该函数。该函数创建类的实例,调用 setup()初始化其属性,然后调用其dispatch()方法。 dispatch查看请求以确定它是否为GET, POST等等,并将请求中继到匹配方法
from django.http import HttpResponse
from django.views import View
class MyView(View):
def get(self, request):
return HttpResponse('result')
def post(self, request):
return HttpResponse('result')
---------- urls 中的设置 ----------
from django.urls import path
from myapp.views import MyView
urlpatterns = [
path('about/', MyView.as_view()),
]
View的方法流程
classmethodas_view(** initkwargs)
返回一个可调用的视图,该视图接收请求并返回响应:response = MyView.as_view()(request)
setup(request,* args,** kwargs)
在dispatch()执行之前初始化实例属性:self.request,self.args,和self.kwargs。
dispatch(request, *args, **kwargs)
用来判断当前请求是否是受支持的HTTP请求,受支持的请求如下:
http_method_names = ['get', 'post'