Django之通用类视图之通用类视图DetailView
本文参考于Django2.2文档
视图函数(或简称视图)只是一个Python函数,它接受Web请求并返回Web响应。该响应可以是网页的HTML内容,重定
向,404错误,XML文档或图像。。。真的。视图本身包含返回该响应所需的任何任意逻辑。该代码可以存在于您想要的任何
地方,只要它在Python路径上即可。可以说,没有其他要求-没有“魔术”。为了将代码放在某处,约定是将视图放在一个名为
的文件中views.py,该文件位于项目或应用程序目录中。
Django有有3种视图:种视图:
函数视图 FBV
类视图 CBV
通用视图 CBGV
函数视图函数视图 FBV
通过条件分支来处理不同通过条件分支来处理不同http请求请求
# 函数视图 FBV
def my_view(request):
if request.method == 'GET':
return HttpResponse("xxx")
elif request.method == 'POST':
return HttpResponse("xxx")
elif request.method == 'DELETE':
return HttpResponse("xxx")
# urls
from . import views
urlpatterns = [
path('', views.my_view, name='index')
]
缺点:函数式编程-面向过程,代码复用率低
类视图类视图 CBV
继承自继承自View类,通过不同实例方法来响应类,通过不同实例方法来响应http请求请求
# 面向对象编程
from django.views.generic import View
class MyView(View):
def get(self,request,*args,**kwargs):
pass
def post(self,request,*args,**kwargs):
pass
# urls
from . import views
# 使用as_view()方法,为基于类的视图提供一个类似函数的入口
urlpatterns = [
path('', views.MyView.as_view(), name='index')
]
通用视图通用视图 CBGV
在类视图上更进一步,把增删改查操作的具体方法抽象出来,使用更少的代码实现功能在类视图上更进一步,把增删改查操作的具体方法抽象出来,使用更少的代码实现功能
以通用显示视图以通用显示视图 DetailView 为例为例:
该视图从以下视图继承方法和属性,MRO顺序:
想了解MRO的具体原理移步我的另一篇博文: https://blog.csdn.net/weixin_44955304/article/details/105175789
DetailView(自身)
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.detail.BaseDetailView
django.views.generic.detail.SingleObjectMixin
django.views.generic.base.ContextMixin
django.views.generic.base.View
评论0