DetailView,UpdateView,DeleteView三者都是针对单一对象的视图。

DetailView

DetailView就是详情,和ListView一样都是展示,从数据库get到一些东西,DetailView和ListView不同的是DetailView它是要获取某一条数据,而ListView的话它是获取到一个表的内容,或者说是一个表的部分内容。

那么要使用DetailView的话就要拿确定的一条数据,如何确定这个数据,我们经常用的一种方法,就是用 primary key,用数据库的主键然后去匹配一条数据,那么就能拿到这条数据的详情,拿到详情后展示在页面上。

对于我们已经创建的Django01_app02_person表来说,它的id,也就是自增id就是 primary key,我们就可以通过id来获取一条数据,其中这个主键是在我们执行python manage.py makemigrations和python manage.py migrate时就已经自动设置好的,我们打开运行makemigrations后生成的文件,可以看到id后面的参数primary_key=true

当然我们也可以自己设置我们的主键,这里就不过多叙述,那么我们来写一个DetailView的例子:

#Django01_app02/views.py
class PersonDetail(DetailView):model = Persontemplate_name = 'Django01_app02/person_detail.html'pk_url_kwarg = 'pk'    #默认就是pk可以不用写

添加urls:

#Django01_app02/urls.py
from django.urls import pathfrom Django01_app02.views import *
app_name='Django01_app02'
urlpatterns = [path('list/', PersonList.as_view(),name='peraon_list'),path('craete/', PersonCreate.as_view(),name='peraon_create'),path('<int:pk>',PersonDetail.as_view(),name='person_detail')
]

 html:

<!--templates/Django01_app02/person_detail.html-->
{% extends 'Django01_app02/base.html' %}
{% block title_content %}{{ object.name }}的信息{% endblock %}{% block body_content %}<p><br></p><div class="card {% if object.temperature > 37.4 %}border-danger{% else %}border-success{% endif %}" style="width: 20rem;"><div class="card-body"><h5 class="card-title mb-2">{{ object.name }}的信息</h5><p class="card-text"><span class="badge bg-info text-white">{{ object.age }}</span><span class="badge bg-info text-white">{{ object.get_gender_display }}</span></p></div><ul class="list-group list-group-flush"><li class="list-group-item">身份证:{{ object.id_card }}</li><li class="list-group-item">住址:{{ object.address }}</li></ul><div class="card-body"><a href="#" class="card-link">编辑</a><a href="#" class="card-link">删除</a><a class="float-end" href="{% url 'personal:peraon_list'%}" >返回列表</a></div></div>
{% endblock %}

这样我们就通过王五的pk,也就是表的自增id查询到了王五的信息

UpdateView

同样的作为针对单一对象的视图,只要有pk,我们就可以定位到某一条数据。作为五大基本视图里面唯二的和form相关的视图,UpdateView的用法和CreateView差不多。首先依旧是创建一个view

#Django01_app02/views.py
class PersonUpdate(UpdateView):form_class = PersonUpdateFormmodel = Persontemplate_name = 'Django01_app02/person_update.html'success_url = reverse_lazy('personal:peraon_list')

然后就是配置urls和编写html代码,因为用法基本相同,所以我们可以把CreateView的html直接拿来用,然后修改form中的action即可。

<!--templates/Django01_app02/person_update.html-->
{% extends 'Django01_app02/base.html' %}
{% block title_content %}修改人员信息{% endblock %}{% block body_content %}<form action='{% url 'personal:person_update' object.pk %}' method="post">{% csrf_token %}<p><br></p>{% for item in form %}<div class=" row col-4 mb-3"><label  class="col-sm-3">{{ item.label_tag }}</label><div class="col">{{ item }}{{ item.errors }}</div></div>{% endfor %}<p class="col-3"><button type="submit" class="btn-primary">保存</button></p></form>
{% endblock %}
#Django01_app02/urls.py
from django.urls import path
from Django01_app02.views import *app_name='Django01_app02'
urlpatterns = [path('list/', PersonList.as_view(),name='peraon_list'),path('craete/', PersonCreate.as_view(),name='peraon_create'),path('<int:pk>/detail/',PersonDetail.as_view(),name='person_detail'),path('<int:pk>/update/',PersonUpdate.as_view(),name='person_update'),
]

需要注意的是:在反向解析url时,因为我们要有主键才能够成功定位到某一条数据,所以,要在url后面加上代表主键参数(primary key)object.pk,在ListView中参数为item.id,例如:

在DetailView的html中加上<a>链接标签,完成之后我们可以点击查询到的单个信息下的编辑按钮,进入修改页面,由于我们使用了CreateView的html,此时的编辑页面和创建登记页面完全相同,但是实现了不同的功能。

DelectView

五大视图的最后一个视图,DeleteView使用和前面的视图使用起来方法都大同小异,注意在编写html文件的form表单时反向解析url不要忘记加上primary key。

先创建view

#Django01_app02/views.py
class PersonDelete(DeleteView):model = Persontemplate_name = 'Django01_app02/person_delete.html'success_url = reverse_lazy('personal:peraon_list')

配置urls

#Django01_app02/urls.py
from django.urls import path
from Django01_app02.views import *app_name='Django01_app02'
urlpatterns = [path('list/', PersonList.as_view(),name='peraon_list'),path('craete/', PersonCreate.as_view(),name='peraon_create'),path('<int:pk>/detail/',PersonDetail.as_view(),name='person_detail'),path('<int:pk>/update/',PersonUpdate.as_view(),name='person_update'),path('<int:pk>/delete/',PersonDelete.as_view(),name='person_delete'),
]

编写html

<!--templates/Django01_app02/person_delete.html-->
{% extends 'Django01_app02/base.html' %}
{% block title_content %}删除人员信息{% endblock %}{% block body_content %}<div class="alert alert-danger ">是否删除{{ object.name }}的全部信息</div><form action='{% url 'personal:person_delete' object.pk %}' method="post">{% csrf_token %}<button class="btn btn-danger" type="submit">删除</button></form>
{% endblock %}

到此为止我们已经完成里Django的初步学习,掌握了一些基本视图的用法,希望在后续学习中我们能够共同努力,充实自己的人生。

基本流程:

 

Django初识(8.常用视图之DetailView,UpdateView,DeleteView)完结相关推荐

  1. django.views.generic通用视图的CreateView, ListView, UpdateView, DetailView, DeleteView用法

    导入: from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView 入坑指南 用 ...

  2. Django之通用类视图DetailView

    本文参考于Django2.2文档 视图函数(或简称视图)只是一个Python函数,它接受Web请求并返回Web响应.该响应可以是网页的HTML内容,重定向,404错误,XML文档或图像...真的.视图 ...

  3. Django中的CBV视图

    Web 开发是一项无聊而且单调的工作,特别是在视图功能编写方面更为显著.为了减少这种痛苦,Django植入了视图类这一功能,该功能封装了视图开发常用的代码,无须编写大量代码即可快速完成数据视图的开发, ...

  4. 13.Django之view初探视图函数(一)

    一.什么是视图函数? Django框架中的视图函数其实就是个普通的python函数,这个函数可以接收web请求,并且返回web响应. 视图函数响应给客户端浏览器的内容,可以是一个html文档,还可以是 ...

  5. Django的View(视图)

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  6. Django入门-6:视图-HttpReqeust对象

    HttpReqeust对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象 视图函数的第一个参数是HttpRequest对象 在django.http模块中定义了HttpR ...

  7. day 53-1 Django基础三之视图函数

    Django基础三之视图函数 本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Djang ...

  8. oracle常用角色权限,Oracle角色、权限的一些常用视图 - 一夜寒江

    Oracle角色.权限的一些常用视图 ORACLE中数据字典视图分为3大类 , 用前缀区别,分别为:USER,ALL 和 DBA,许多数据字典视图包含相似的信息. USER_*: 有关用户所拥有的对象 ...

  9. django的models常用字段、属性

    一丧:如果我的孤独是鱼,想必连鲸鱼都会慑于其巨大与狰狞而逃之夭夭. django 模型models 常用字段 1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成 ...

最新文章

  1. C++ 笔记(35)— std::to_string 转换整形数字为字符串
  2. python3环境下 tensorflow环境中经常遇到'*' has type str, but expected one of: bytes问题的解决
  3. spark结构化流保存mysql_Spark结构化流异常:不支持没有水印的附加输出模式
  4. 全志 添加外挂RTC Hym8563
  5. Silverlight实例教程 - Validation验证系列汇总
  6. python交互模式切换_Python 交互式窗口 (REPL) - Visual Studio | Microsoft Docs
  7. 3个常考的SQL数据分析题(含数据和代码)
  8. Spring和AspectJ的领域驱动设计
  9. 对比学习效果差?谷歌提出弱语义负样本,有效学习高级特征!
  10. wordpress主题webstack pro V2.0406 完美版
  11. python之质数判断
  12. MySQL之DDL(定义)语句
  13. android ar人脸贴图,ARCore与ARKit实现人脸贴纸、更换材质等动画效果
  14. win10c语言乱码修复方法,“字体库异常、电脑乱码的解决方案”的解决方案
  15. rails/ruby/gem/RubyOnRails环境搭建-Windows
  16. Week08手写笔记
  17. Android Studio中ListView通过自定义Adapter显示数据3-1
  18. 平板电脑性价比排行2022
  19. 计算机怎样打开鼠标点的键盘,如何打开计算机虚拟键盘?五种打开计算机虚拟键盘的方法简介...
  20. 用二叉树表示家谱关系并实现各种查找功能

热门文章

  1. 汇编——实现冒泡排序+讲解
  2. log.error()打印内容区别
  3. RabbitMQ 重置用户名和密码的方法分享
  4. Linux配置jdk1.8环境变量
  5. PHP获取客户端真实IP地址的方法
  6. VUE3-Cesium(使用entities创建盒子、圆、走廊、圆柱实体)
  7. Unity技术艺术总监江毅冰:从游戏到实时电影
  8. Linux系统基础——内存管理
  9. Mac触摸板必会手势
  10. css 超出文本 省略号