Django基础入门⑮:更新书籍信息 删除书籍条目信息 Django静态文件配置

Django基础入门⑮:更新书籍信息 删除书籍条目信息 Django静态文件配置

    • 更新书籍信息
    • 删除书籍条目信息
    • Django静态文件配置

🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人
🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读!
🎁🎁:文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。


更新书籍信息

更改原有的书籍信息也是经常用到的功能,比如价格的调动等,那么下面就来实现这个功能,首先还是编写模板层页面,在 templates/index 中新建 update_book.html 页面,代码所下所示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>更新书籍表</title>
</head>
<body>
<form action="/index/update_book/{{ book.id }}" method="post">{% csrf_token %}
<!--    css3 disabled属性 不可选状态/禁用元素--><p>书籍名:<input type="text"  value="{{ book.title }}" disabled="disabled"></p><p>零售价:<input type="text" value="{{ book.price }}" name="price"></p><p>市场价:<input type="text" name="retail_price" value="{{ book.retail_price }}"></p><p>出版社:<input type="text" value="{{ book.pub.pubname }}" disabled="disabled"></p><p><input type="submit" value="提交"></p>
</form>
</body>
</html> 

上述完成了update_book.html页面的编写,我们使用了CSS3的disabled属性,将 title 和 public 置于不可选择的状态,只允许修改零售价与市场价。
接下来我们在 index\views.py 中编写视图层代码:

def update_book(request, book_id):#用 book_id给每个书籍加上标记#将其作为查找书籍的参数book_id = int(book_id)try:book = Book.objects.get(id=book_id)except Exception as e:return HttpResponse('--没有找到任何书籍---')if request.method == 'GET':return render(request, 'index/update_book.html', locals())elif request.method == 'POST':price = request.POST.get('price')retail_price = request.POST.get('retail_price')if not price or not retail_price:return HttpResponse('请输入更改后的零售价或市场价!')price = float(price)retail_price = float(retail_price)# 修改对象属性值book.price = pricebook.retail_price = retail_price# 存储更新后的状态book.save()#重定向至127.0.0.1:8000/index/all_book/return HttpResponseRedirect('/index/all_book')return HttpResponse("书籍信息更新功能")

上述的代码中我们使用了动态URL的方式,book_id 作为动态参数起到了关联每个书籍条目的作用,每个书籍条目都具有唯一性的 id,这里选择它作为参数再合适不过了,最后我们要完成动态路由的配置,如下所示:

urlpatterns=[path('update_book/<int:book_id>',views.update_book)
]

在浏览器地址栏输入 127.0.0.1:8000/index/update_book/5 直接可以进入,书籍价格的修改页面,如下所示:

在这里插入图片描述

然后修改市场价也为 70.00,并提交数据,url 会自动跳转至 127.0.0.1:800/index/all_book/ 页面,如下所示:

在这里插入图片描述

删除书籍条目信息

现在实现本项目实例的最后一个功能,即书籍条目的删除功能,我相信大家已经可以独立完成删除功能了,不过我们还是要给出代码,大家可以参照一下。
首先还是在 templates/index 中新建 delete_book.html 页面,代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>删除书籍条目</title><style>input:not([type="submit"]){border:1px solid blue;}input[type="submit"]{background:red;}</style>
</head>
<body>
<form action="" method="post">{% csrf_token %}<p>书籍名:<input type="text"  value="{{ book.title }}" name="title"></p><p>零售价:<input type="text" value="{{ book.price }}" name="price"></p><p>市场价:<input type="text" name="retail_price" value="{{ book.retail_price }}"></p><p>出版社:<input type="text" value="{{ book.pub.pubname }}" name="pub"></p><p><input type="submit" value="确认删除"></p>
</form>
</body>
</html>

编写完成后,在 index\views.py 中编写视图层逻辑代码,如下所示:

def delete_book(request,book_id):book_id=int(book_id)try:book=Book.objects.get(id=book_id)except Exception as e:print('get查询出现了异常没找到数据',e)return HttpResponse('这里没有任何书籍可以被删除')if request.method=="GET":return render(request,'index/delete_book.html',locals())elif request.method=="POST":book.delete()return HttpResponseRedirect("/index/all_book")return HttpResponse("书籍条目信息删除功能")

并配置路由映射关系,如下所示:

urlpatterns=[path('delete_book/<int:book_id>',views.delete_book)
]

访问 127.0.01:8000/index/all_book/ 可以直接点击 option 中对应书籍的删除功能,会得到如下页面:
在这里插入图片描述

点击确认删除,则 url 会重新定向到书籍展示页,大家会看到 《钢铁》 书籍条目已经被删除了,如下所示:

在这里插入图片描述

至此我们完成了 Django 小型图书管理项目的所有逻辑代码,实现了图书的增删改查操作,我们主要运用了一些前面讲过的知识,比如 ORM
模块等。

Django静态文件配置

js、css、img等都叫做静态文件。

那么关于django中静态文件的配置,我们就需要在settings配置文件里面做一些修改。

STATIC_URL = '/static/'STATICFILES_DIRS = [os.path.join(BASE_DIR, 'commomStatic')  # 第二个参数就是项目中存放静态文件的文件夹名称
]

STATIC_URL是在某个具体的App下新建static目录,用来存放与App相关的静态资源。

STATICFILES_DIRS是在项目目录下新建commomStatic目录,用来存放多个App之间公共的静态资源。

STATIC_ROOT是项目部署的时候才会用到的,是配合Nginx使用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/19121.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring源码系列-第2章-后置工厂处理器和Bean生命周期

第2章-后置工厂处理器和Bean生命周期 后置工厂处理器属于后置处理器&#xff0c;后置处理器是Spring最核心的部分&#xff0c;Spring几乎所有的附加功能全由它完成。 什么是BeanPostProcessor&#xff1f; public interface BeanPostProcessor {/*** Apply this {code BeanPos…

分布式监控系统之zabbix6.0二

分布式监控系统之zabbix6.0二 一、部署 zabbix 代理服务器二、部署 Zabbix 高可用集群三、Zabbix 监控 Windows 系统四、Zabbix 监控 java 应用五、Zabbix 监控 SNMP 一、部署 zabbix 代理服务器 分布式监控的作用&#xff1a; 分担 server 的集中式压力解决多机房之间的网络…

跨站脚本攻击XSS

​​​​​​1、漏洞原理及防御 XSS又叫CSS (CrossSiteScript),因为与层叠样式表(css)重名,所以叫Xss&#xff0c;中文名叫跨站脚本攻击。 xss攻击&#xff0c;主要就是攻击者通过“html注入”篡改了网页&#xff0c;插入了恶意的脚本&#xff0c;从而在用户浏览网页时&#…

火爆全网,自动化测试-Allure完美测试报告(详全)卷起来...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、allure简介 A…

java.lang.UnsatisfiedLinkError: Could not load SWT library.

java.lang.UnsatisfiedLinkError: Could not load SWT library. https://download.eclipse.org/windowbuilder/lastgoodbuild

【停用词】NLP中的停用词怎么获取?我整理了6种方法

文章目录 一、停用词介绍二、停用词应用场景2.1 提取高频词2.2 词云图 三、停用词获取方法3.1 自定义停用词3.2 用wordcloud调取停用词3.3 用nltk调取停用词3.3.1 nltk中文停用词3.3.2 nltk英文停用词 3.4 用sklearn调取停用词3.5 用gensim调取停用词3.6 用spacy调取停用词 一、…

亚马逊云科技为企业提供一站式的出海策略,为企业保驾护航

走出国门&#xff0c;寻找新的盈利空间、优化资源配置、实现创新突破&#xff0c;已经成为中国企业的战略共识。如何进行全球化布局、本地化运营&#xff0c;实现高质量出海&#xff0c;是出海企业共同面临的课题。在【潮向新世界】出海日活动上&#xff0c;亚马逊云科技分享了…

热爱python的第一天:初识python,搭建python环境,运行第一个python小程序

目录 1 初始python python 概述 python的应用领域 应用python的公司 2 搭建python 开发环境 2.1 安装python&#xff08;以windows 系统为例&#xff09;&#xff08;1&#xff09;下载安装包 &#xff08;2&#xff09; 下载保存后打开文件夹点击以管理员身份运行 &…

apt-get install命令

在Linux系统中&#xff0c;apt-get命令默认安装包的位置是在/usr目录下。具体来说&#xff0c;安装的可执行文件会存储在/usr/bin目录下&#xff0c;而库文件会存储在/usr/lib目录下。同时&#xff0c;相应的配置文件和文档等也会存储在/usr/share目录下。 举例&#xff0c;ap…

Rdkit|化学指纹(fingerprint)

github:地址 文章目录 Rdkit|化学指纹&#xff08;fingerprint&#xff09;化学指纹&#xff08;fingerprint&#xff09;RDKFingerprintMorgan指纹提供的指纹信息存储在字典中 MACCS指纹AtomPair指纹TopologicalTorsion指纹参考 Rdkit|化学指纹&#xff08;fingerprint&#x…

IDEA中使用.env文件配置信息

一、说明 我们以配置阿里云的 Access Key 的信息为例&#xff08;配置别的信息当然也可以&#xff0c;我只是举个例子&#xff01;&#xff01;&#xff01;&#xff09;&#xff0c;假设我们的代码中需要用到它。Access Key有两个属性&#xff0c;分别为【ALIBABA_CLOUD_ACCE…

MySQL数据类型

目录 数据类型分类 ​编辑tinyint类型 bit类型 float类型 decimal类型 char类型 varchar类型 char和varchar比较 日期和时间类型 enum和set 数据类型分类 tinyint类型 数值越界测试&#xff1a; mysql> create table tt1(num tinyint); Query OK, 0 rows affec…