单表的增删改查实例(图书管理 系统)

一 配置sql

(1)在项目下的settings里配置数据库(先在mysql里创建好名叫sthw的库)

(2)在项目文件下的__init__.py文件中,用mysql替代默认使用的MySQLdb

二 创建表(字段)

(1)在应用app01的models.py文件里创建.写类

(2)数据库同步

在终端(项目文件夹下)输入:

Python manage.py makemigrations

Python manage.py migrate

四 插入记录

通过Python插入记录有三种:

方式一:配置urls----》访问url,触发url对应的函数执行,函数里有创建记录的命令。

(1)在urls.py里配置url

(2)在视图(views.py)中写query函数

(3)访问httP://127.0.0.1:8000/query就批量创建记录了

方式二:进入python console,在命令行中输入,也可创建记录(不推荐)

方式三:单独写py文件,配置django环境。

(1)在总项目文件夹下建立xx.py文件

(2)配置django环境

加载环境和manage.py里加载环境方式相同

(3)添加记录,执行该文件

四 查看书籍功能

(1)分发路由

name为别名(防止后面用到这个路径要反复修改。)后面要写路径,直接写:

from django.urls import reverse   #reverse是做url别名反向解析

return redirect(reverse(‘books‘))

而不是写:

return redirect(‘/books‘)

当前面路径(/books/)修改时,后面就不用修改了(注:django不要改别名)

(2)视图(views.py)写逻辑函数

将字典{‘all_objs‘:all_objs}传给books.html,books.html模板渲染后,经过render方法发到浏览器,展示给用户

(3)写books.html

A.在总项目文件夹下的templates文件夹下建立books.html

B.写books.html,需要导入bootstrap和jquery文件,要进行静态文件配置:

静态文件配置:

(i).在总项目文件夹下新建statics文件夹(名字不要为static。防止和别名相同)

(ii)在settngs配置静态文件

(iii)将bootstrap和jquery文件复制进statics即可

C.在book.html中导入静态文件,然后再开始写网页

D.html关键代码

首先数据库查找到数据在all_objs的querset集合里,通过遍历得到book对象,里面就有title,price等值。通过点的方式调用。如book.title。For循环是段逻辑,因此用{% %}包裹,forloop.counter是变量,就用{{}}渲染。时间用Y-m-d格式输出。

(4).最后books页面下呈现效果如下:

五 增加书籍功能

在book.html页面点击‘添加书籍’按钮,开始转入增加书籍页面。因此要现在book.html的添加书籍按钮处,点击转到add_books的url.

在标签的href属性写路径。可以上面的路径,但实际要反向解析。

在html里根据别名反向解析出url。{% url ‘别名’%} 这是无参形式的。有参形式为:{% url ‘别名’%  参数}

当然也可直接在地址栏输入网址访问。

(1)分发路由

(2)写视图函数add_books()

Add_books视图函数由三部分组成:一是返回增加书籍的页面;二是向数据库传送数据;三是返回主页(books页面)

第一部分:返回添加书籍的页面

A.返回页面(render)

地址栏是get请求,因此先判断是否method是GET,是返回页面。

B.写add_book.html

(i)导入静态文件

(ii)注意处:

表单为Post方式提交数据,好与链接获取网页发get方式区分开。由于是Post提交,要进行crsf_token验证,写上。Input里的name为等下接收数据 .get()方法的键。

C页面效果如下

第二部分:向数据库传送数据

接收完数据后开始向数据库写入数据:逻辑在视图函数中完成

首先,接着前面返回网页后面:是POST请求,执行,数据存取操作

Request.POST.get()取得传送过来的字典。Get方法的里的字典的键就是Input里name的值。通过控制器在数据库添加数据。(pycharm提供的可视化数据库看不到,Missing drivers下载不了,只能通过Mysql里看)

第三部分:返回主页(books页面)

此时返回主页要重定向redirect,不能render.原因:此刻数据有更新,如render则要重新再查一遍数据,然后把数据给网页渲染,再通过render把html发给浏览器。耗费大量时间。而重定向直接跳转到books页面,不需要再查询

重定向也使用的别名。

上面可以直接写成:

redirect源码中有reverse

六 删除书籍

(1)books.html点击操作

在books.html页面中的a标签添加路径。点击可以直接转到链接

路径是通过网页的反向解析写出,而且是有参形式的。为什么是有参的。因为点击不同位置的删除,对应不同的url(后面的数字是Mysql中该条记录的id值)。有参别名的网页反向解析:{%url ‘别名’ 参数%}

(2)路由分发

(\d+)是无名分组,匹配路径delete_books后面的数字。注意:一是在视图函数中要加入参数。二是在html文件的别名反向解析中也要添加参数

(3)视图函数delete_book

在数据库中找到删除的那个记录,然后删除。 (book_id就是mysql里的id)

删除后重新返回首页

七 编辑书籍

(1)在books.html做按钮功能

(2)路由分发

(3)视图函数edit_book

edit_book()分为两大部分:一是展示编辑页面(GET),二是对提交的修改的数据进行更新(POST)并展示.

第一部分:展示编辑页面

(1)查找到选中的编辑的那条记录。

后面加了first()。选中的编辑记录就只有一条。Edit_obj要拿到html去渲染(显示已有的内容,再针对那个修改),防止每次通过.0方式调用。就直接拿到Model对象,而不是queryset集合。

(2)向浏览器返回页面。(有模板渲染。就把数据库查到的参数通过字典的方式交给html文件)

(3)写edit_book.html

edit_book.html注意点:

action没写,代表表单提交的数据还是提交到当前页(如127.0.0.1:8000/edit_book/56),等会数据更新会用到这个。Novalidate表示提交表单时浏览器不用验证。

 Input里的name为提取数据时的键,而value为显示在文本框里的值。这个值为数据库里查找出来的值。通过render方法的字典方式传过来。以点的方式调用里面的值。

(4)效果如下:

第二部分:数据更新

首先else表示是POST提交方式。

然后取得提交到数据

最后更新。

更新注意:先要找到编辑的记录。这式id还是bookid.因为提交的数据是当前页面,此时包含book_id.而此时的book_id就和要更新的在mysql中的id相同。可以直接写id=book_id查找。然后直接update()更新。

最后返回Books页面

原文地址:https://www.cnblogs.com/yq055783/p/12348437.html

时间: 2024-07-31 14:49:16

单表的增删改查实例(图书管理 系统)的相关文章

【框架】[Hibernate]利用Hibernate进行单表的增删改查-Web实例

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 前面两篇博客已经将Hibernate的基础知识讲解得差不多了,差不多到写实例的时候了. 本篇只用hibernate进行单表的增删改查. 应用Hibernate,对students表进行增删改查. service层和DAO层,我都是直接写实现类了(因为这里主要是演示一下Hibernate的使用),如果是开发项目,注意一定要写接口! 准备数据库: 首先准备一个students表: cr

web day19 Service层处理事务(利用ThreadLocal),TxQueryRunner小工具,单表练习(增删改查操作),分页

Service事务 DAO中不是处理事务的地方,因为DAO中的每个方法都是对数据库的一次操作 在Service中不应该出现Connection,它应该只在DAO中出现, 因为它是JDBC的东西,JDBC的东西是用来连接数据库的 修改JdbcUtils 我们把对事务的开启和关闭放到JdbcUtils中,在Service中调用JdbcUtils的方法来完成事务的处理, 但在Service中就不会再出现Connection这一"禁忌"了. 代码 public class JdbcUtils

3.django模板,单表ORM增删改查

1.Django模板语法 模板语法: 变量: {{}} 1 深度查询 句点符 2 过滤器 {{val|filter_name:参数}} 标签: {% %} 1.1Django模板使用 from django.shortcuts import render import datetime def index(request): now = datetime.datetime.now() return render(request,"index.html",{"current_t

django 利用ORM对单表进行增删改查

牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出来. 以下内容,参考django官方文档 . 1.创建MODEL 这里和官方文档一致.直接拷出来,放到一个叫models的py文件里面.若是你的项目中没有,一定不要觉得无处写代码.你自己建一个即可 同步数据库: 执行以下命令.不懂的可以参考:django连接mysql python manage.p

Mybatis(一)实现单表的增删改查

1.1 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO). MyBatis参考资料官网:https:/

23Spring_JdbcTemplate来实现单表的增删改查

第一步建表: 第二步:编写product表的实体类 public class produce { private int id; private String name; private String price; /** * @return the id */ public int getId() { return id; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @

MYSQL基础操作之单表的增删改查

一.添加数据. -- 1.创建表,并插入一定的数据. 1 CREATE TABLE STUDENT( 2 ID INT, 3 USERNAME VARCHAR(20), 4 SERVLET INT, 5 JSP INT, 6 ADDRESS VARCHAR(30) 7 ); 8 INSERT INTO STUDENT VALUES (1,'张三',23,84,'京口区'); 9 INSERT INTO STUDENT VALUES (2,'李四',36,74,'润州区'); 10 INSERT

Hibernate和jsp做数据库单表的增删改查

虽然很基础,但是我转牛角尖了~~~~这是几个文件 1.最重要的.Java文件 1 package com.chinasofti.hibb.struts; 2 3 4 import org.hibernate.Session; 5 import org.hibernate.SessionFactory; 6 import org.hibernate.Transaction; 7 import org.hibernate.cfg.Configuration; 8 import com.chinaso

ORM对单表的增删改查

表记录的增加: 1)b = Book(name='python', price=99) b.save() 2)Book.objects.create(name='python', price=99) https://www.cnblogs.com/tangjianyu/p/8018745.html 原文地址:https://www.cnblogs.com/wangyue0925/p/9154849.html