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

  • 方法流程图在这里插入图片描述

  • 具有(可重写-自定义)的类属性

    属性 Defined in
    content_type = None TemplateResponseMixin
    context_object_name = None SingleObjectMixin
    extra_context = None ContextMixin
    http_method_names = [‘get’, ‘post’, ‘put’, ‘patch’, ‘delete’, ‘head’, ‘options’, ‘trace’] View
    model = None SingleObjectMixin
    pk_url_kwarg = ‘pk’ SingleObjectMixin
    query_pk_and_slug = False SingleObjectMixin
    queryset = None SingleObjectMixin
    response_class = <class ‘django.template.response.TemplateResponse’> TemplateResponseMixin
    slug_field = ‘slug’ SingleObjectMixin
    slug_url_kwarg = ‘slug’ SingleObjectMixin
    template_engine = None
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值