Django之通用类视图DetailView_django detailview-程序员宅基地

技术标签: python  技术  django  新手上路  

本文参考于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’
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44955304/article/details/105476187

智能推荐

【优化选址】基于粒子群算法求解V图配电网电动汽车充电站选址优化问题附Matlab实现-程序员宅基地

文章浏览阅读88次。本文将介绍基于粒子群算法求解V图配电网电动汽车充电站选址优化问题算法流程。随着电动汽车的普及,充电站的建设变得越来越重要。如何在充电站数量有限的情况下,选取最优的位置,是一个需要解决的问题。本文将从以下几个方面进行介绍:一、问题描述 在V图配电网中,选取一些节点建设充电站,使得每个节点到最近的充电站的距离最小,同时保证所有充电站的容量之和不小于需求总量。该问题可以用数学模型表示如下:二、粒子群算法 粒子群算法是一种群体智能算法,模拟鸟群捕食时的行为,通过群体协作来寻找最优解。

【计算机毕业设计】医院门诊互联电子病历管理信息系统_毕设医院门诊系统-程序员宅基地

文章浏览阅读339次。管理员登陆后,主要模块包括首页、个人中心、用户管理、医生管理、项目分类管理、项目信息管理、预约信息管理、检查信息管理、检查报告管理、药品分类管理、药品信息管理、电子病历管理、系统管理等功能。用户登陆后,主要模块包括首页、个人中心、预约信息管理、检查信息管理、检查报告管理、药品信息管理、电子病历管理等功能。return R.ok("密码已重置为:123456");return R.error("用户已存在");return R.error("账号不存在");return R.error("用户已存在");_毕设医院门诊系统

7-26 单词长度 (C语言)_c语言单词长度你的程度要读入-程序员宅基地

文章浏览阅读1.5k次。7-26 单词长度 (15 分)你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it’s算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。输入格式:输入在一行中给出一行文本,以.结束提示:用scanf(&quot;%c&quot;,…);来读入一个字符,直到读到.为止。输出格式:在一行中输出这行文本对应的..._c语言单词长度你的程度要读入

QCustomPlot的下载和使用_qcustomplot下载-程序员宅基地

文章浏览阅读668次。QCustomPlot是一个基于Qt画图和数据可视化的C++控件。在Qt下的绘图工具有Qwt、QChart和QCustomPlot,置于选择哪个绘图工具各有优缺点。在绘制大量数据(10万个点以上)时选择QCustomPlot,在数据量比较小时,QChart和QCustomPlot相差无几。_qcustomplot下载

【云原生 | 从零开始学istio】一、Istio介绍—服务网格-程序员宅基地

文章浏览阅读2.2k次,点赞16次,收藏24次。介绍了istio的功能以及什么是istio_istio

python必读三本书_自学Python6个月后,我发现学Python必看这三本书,让你少走一半弯路!...-程序员宅基地

文章浏览阅读772次。我是在半年前接触到Python的,我之前没有一点编程基础,但在我自学的这半年里,我发现自己越来越喜欢他,迄今为止,Python都非常友好并且易于学习!它几乎可以做任何事,从简单的脚本创建、web、到数据可视化以及AI人工智能,越来越多的人投身到Python的怀抱中。接下来我给大家推荐3本自学Python必看的书籍,会帮你少走很多弯路!1.《A Byte of Python》没错,这是一本全英文版的..._学习pathon必看书

随便推点

UE4_碰撞_使用蓝图控制物体移动时如何让被阻挡_ue中怎么让阻挡消失-程序员宅基地

文章浏览阅读280次。利用蓝图更改一个物体的位置,发现本来两个应该相互阻挡的物体被穿过去了。为了不让相互阻挡的物体被穿过去,我们需要设置好蓝图节点的参数Sweep。_ue中怎么让阻挡消失

ARM Cortex-M架构基本概念-程序员宅基地

文章浏览阅读1.5k次。R13寄存器可以作为stack pointer,SP用于记录当前堆栈的地址,当在不同任务中切换时,SP用于保存上下文(一般来说,SP寄存器中的地址是当前正在执行的指令所在的地址)Cortex-m0中可以将SP细化成MSP和PSP:在应用程序中,需要特权访问时使用MSP,例如异常访问和系统内核访问;R14可用于链式寄存器,主要功能:(1)用于保存子程序或者一个程序调用的返回地址 (2)当程序调用结束后,将LR中的返回地址加载到程序计数器(PC)中。(1)R0-R7可以被任意指令访问。_arm cortex-m

中国裁判文书网爬虫分析[email protected]程序员宅基地

文章浏览阅读8.7k次,点赞8次,收藏14次。前言本篇主要分析文书网爬虫思路,仅供个人学习之用,切勿用于任何商业用途。分析一中国裁判文书网首页地址:http://wenshu.court.gov.cn/ 随便点击一下搜索,进入: 进入第一个结果: 注意圆圈中的下载按钮,点击下载,一个.docx格式的文档就安安稳稳的躺在你的电脑硬盘上了。 到这里初步分析结束,我们自然就想到了爬虫的内容: [email protected]

Open3D 读取、显示、保存图片_open3d 保存图片不显示-程序员宅基地

文章浏览阅读10w+次,点赞3次,收藏5次。open3d实现图片、图像数据的读取显示和保存。_open3d 保存图片不显示

C++ STL常用算法(详解)_partial_sort(first, middle, last, , comp)-程序员宅基地

文章浏览阅读443次。作为一门面向对象的编程语言,使用 C++ 编写程序有一个缺点,即随着代码面向对象程度的提高,其执行效率反而会降低。例如,经实验证明几乎在所有情况下,直接操作一个 double 类型变量的执行效率,要比操作一个含 double 类型成员属性的类对象更高。对于大多数读者来说,以上所说是很容易想通的,因为它符合我们对高级编程语言的认知。但本节要介绍的内容,一定程序上会打破这个认知。_partial_sort(first, middle, last, , comp)

Android开发--Realm框架_realm.setdefaultconfiguration android-程序员宅基地

文章浏览阅读603次。Realm简介 Realm 是一个移动数据库,可运行于手机、平板和可穿戴设备之上。可以让你的应用更快速,带来难以想象的体验。其目标是为了代替 CoreData 和 SQLite 数据库。 Realm非常易用,不是在SQLite基础上的ORM,它有自己的数据查询引擎。是完全重新开发的数据库,速度非常快,并且支持跨平台,数据加密,数据迁移,支持json,流式api等 。..._realm.setdefaultconfiguration android

推荐文章

热门文章

相关标签