一、向数据库添加图书数据

【上接】https://blog.csdn.net/u010132177/article/details/103831173

1)首先开启mysql服务,并运行项目

启动mysql服务:
net start mysql80 启动项目:
py manage.py runserver

2)在templates/app1/book.html添加按钮

【1】添加新书按钮 <a href="/detail/{{book.id}}">

hre里的斜杠/默认一定要加上,否则其它页面,如下面的delete中,会导致定向到 /index/delete/不存在 的页面中去

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>书籍页面</title>
</head>
<body>
本站的图书有:<br/>
<ul>
{% for book in books %}
<!--通过href属性,把book的id做为参数传给详情页,进而查询对应英雄信息-->
<li><a href="/detail/{{book.id}}"> {{book.btitle}}</a>:{{book.bpub_date}}</li>
{%empty%}
暂时没有图书!!!
{% endfor %}
</ul>
<!--【1】添加新书按钮-->
<a href="/addInfo">添加一本三国书</a><br/>
</body>
</html>

3)app1/views.py 编写向数据表中增加书籍函数

【0】引入返回请求模块、重新定向模块

【0.1】引用时间模块

【1】添加书籍函数:创建bookinfo对象,并添加一本书

【2.0】成功 return HttpResponse('数据添加成功')

【2】添加成功后重新定向到页面:http://127.0.0.1:8000/books/

from django.shortcuts import render
from app1.models import BookInfo #从模型下导入bookinfo数据模型
from django.http import HttpResponse,HttpResponseRedirect #【0】引入返回请求模块、重新定向模块
from datetime import date #【0.1】引用时间模块 def index(request):
'''app1应用:首页'''
context={} #定义1个字典
context['hello']='hello world!!!' #向字典写一个键:值(hello:'hello world!!')
context['wa']='wawawawawahahahaha!'
context['list']=list(range(1,10)) #定义一个字典值为一个列表,list为把内容转换为列表
return render(request,'app1/index.html',context) #返回:把context渲染到app1/index.html的模板文件 def books(request):
'''app1应用:图书列表页'''
books=BookInfo.objects.all()#从数据库获取图书对象列表
return render(request,'app1/book.html',{'books':books})#把获取到的图书对象赋值给books键。【注意】键'books'必须要加引号 def detail(request,bookId):# bookId为接收urls.py中指定的参数,来源页templates/app1/book.html
'''app1应用:图书详情页,显示英雄信息'''
book=BookInfo.objects.get(pk=bookId) #查询主键为url中传过来的参数Id。或写成:id=bookId
heros=book.heroinfo_set.all() #关联查询:查询对应书的所有英雄信息
return render(request,'app1/detail.html',{'book':book,'heros':heros}) #把参数渲染到detail页面去 def addInfo(request):
'''添加新书到bookinfo表里'''
#【1】创建bookinfo对象,并添加一本书
b=BookInfo()
b.btitle='水浒传'
b.bpub_date=date(1989,9,9)
b.save() #return HttpResponse('数据添加成功')
#【2】添加成功后重新定向到页面:http://127.0.0.1:8000/books/
return HttpResponseRedirect('/books')

4)添加app1/urls.py信息

添加三国书

from django.urls import path,re_path
from . import views urlpatterns=[
path('app1/',views.index),
path('books/',views.books), # 书详情页,通过url接收参数2种写法以下两种都可:
# path(r"detail/<int:bookId>",views.detail), #参数用尖括号包起来<>
re_path(r"^detail/(\d+)",views.detail), #参数必须要带括号 path('addInfo/',views.addInfo),#添加三国书
]

5)效果:http://127.0.0.1:8000/books/

点击后即向数据库添加一本书,添加成功后,重定向回books页面。

二、删除对应图书

1) templates/app1/book.html

关键行:<a href="/delete/{{book.id}}">删除</a>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>书籍页面</title>
</head>
<body>
本站的图书有:<br/>
<ul>
{% for book in books %}
<!--通过href属性,把book的id做为参数传给详情页,进而查询对应英雄信息-->
<li><a href="/detail/{{book.id}}"> {{book.btitle}}</a>:{{book.bpub_date}}-----<a href="/delete/{{book.id}}">删除</a> </li>
{%empty%}
暂时没有图书!!!
{% endfor %}
</ul>
<!--添加新书按钮-->
<a href="/addInfo">添加一本书</a><br/>
</body>
</html>

2 )配置App1/urls.py

关键:path(r'delete/<int:bid>',views.deleteInfo), #删除对应图书

注意:path()间逗号一定别忘记写,否则可能导致未知错误

from django.urls import path,re_path
from . import views urlpatterns=[
path('app1/',views.index),
path('books/',views.books), # 书详情页,通过url接收参数2种写法以下两种都可:
# path(r"detail/<int:bookId>",views.detail), #参数用尖括号包起来<>
re_path(r"^detail/(\d+)",views.detail), #参数必须要带括号 path('addInfo/',views.addInfo), #添加三国书 path(r'delete/<int:bid>',views.deleteInfo), #删除对应图书
]

3)app1/views.py编写删除函数

删除bookinfo id=bid的书籍

from django.shortcuts import render
from app1.models import BookInfo #从模型下导入bookinfo数据模型
from django.http import HttpResponse,HttpResponseRedirect #【0】引入返回请求模块、重新定向模块
from datetime import date #【0.1】引用时间模块 def index(request):
'''app1应用:首页'''
context={} #定义1个字典
context['hello']='hello world!!!' #向字典写一个键:值(hello:'hello world!!')
context['wa']='wawawawawahahahaha!'
context['list']=list(range(1,10)) #定义一个字典值为一个列表,list为把内容转换为列表
return render(request,'app1/index.html',context) #返回:把context渲染到app1/index.html的模板文件 def books(request):
'''app1应用:图书列表页'''
books=BookInfo.objects.all()#从数据库获取图书对象列表
return render(request,'app1/book.html',{'books':books})#把获取到的图书对象赋值给books键。【注意】键'books'必须要加引号 def detail(request,bookId):# bookId为接收urls.py中指定的参数,来源页templates/app1/book.html
'''app1应用:图书详情页,显示英雄信息'''
book=BookInfo.objects.get(pk=bookId) #查询主键为url中传过来的参数Id。或写成:id=bookId
heros=book.heroinfo_set.all() #关联查询:查询对应书的所有英雄信息
return render(request,'app1/detail.html',{'book':book,'heros':heros}) #把参数渲染到detail页面去 def addInfo(request):
'''添加新书到bookinfo表里'''
#【1】创建bookinfo对象,并添加一本书
b=BookInfo()
b.btitle='水浒传'
b.bpub_date=date(1989,9,9)
b.save() #return HttpResponse('数据添加成功')
#【2】添加成功后重新定向到页面:http://127.0.0.1:8000/books/
return HttpResponseRedirect('/books') def deleteInfo(request,bid):
'''删除bookinfo id=bid的书籍'''
#根据传过来的bid查到对应书籍
b=BookInfo.objects.get(id=bid) #也可(主键)pk=bid
b.delete() return HttpResponseRedirect('/books')

效果:http://127.0.0.1:8000/books/

点删除,删除对应图书,并重定向回books页面

三、重定向简写

关键:from django.shortcuts import render,redirect #引入重定向简写模块

使用:return redirect('/books') #【2】简写重定向

app1/views.py

from django.shortcuts import render,redirect #引入重定向简写模块
from app1.models import BookInfo #从模型下导入bookinfo数据模型
from django.http import HttpResponse,HttpResponseRedirect #引入返回请求模块、重新定向模块
from datetime import date # 引用时间模块 def index(request):
'''app1应用:首页'''
context={} #定义1个字典
context['hello']='hello world!!!' #向字典写一个键:值(hello:'hello world!!')
context['wa']='wawawawawahahahaha!'
context['list']=list(range(1,10)) #定义一个字典值为一个列表,list为把内容转换为列表
return render(request,'app1/index.html',context) #返回:把context渲染到app1/index.html的模板文件 def books(request):
'''app1应用:图书列表页'''
books=BookInfo.objects.all()#从数据库获取图书对象列表
return render(request,'app1/book.html',{'books':books})#把获取到的图书对象赋值给books键。【注意】键'books'必须要加引号 def detail(request,bookId):# bookId为接收urls.py中指定的参数,来源页templates/app1/book.html
'''app1应用:图书详情页,显示英雄信息'''
book=BookInfo.objects.get(pk=bookId) #查询主键为url中传过来的参数Id。或写成:id=bookId
heros=book.heroinfo_set.all() #关联查询:查询对应书的所有英雄信息
return render(request,'app1/detail.html',{'book':book,'heros':heros}) #把参数渲染到detail页面去 def addInfo(request):
'''添加新书到bookinfo表里'''
#【1】创建bookinfo对象,并添加一本书
b=BookInfo()
b.btitle='水浒传'
b.bpub_date=date(1989,9,9)
b.save() #return HttpResponse('数据添加成功')
#【2】添加成功后重新定向到页面:http://127.0.0.1:8000/books/
return HttpResponseRedirect('/books') def deleteInfo(request,bid):
'''删除bookinfo id=bid的书籍'''
#根据传过来的bid查到对应书籍
b=BookInfo.objects.get(id=bid) #也可(主键)pk=bid
b.delete() #return HttpResponseRedirect('/books')
return redirect('/books') #【2】简写重定向

效果同上

Django(六)实战2:向数据库添加,删除数据、重定向写法、重定向简写的更多相关文章

  1. 使用Bootstrap + Vue.js实现 添加删除数据

    界面首先需要引入bootstrap的css和bootstrap的js文件,还有vue.js和jQuery.js才可以看见效果. 这里提供bootstrap的在线文件给大家引用: <!-- 最新版 ...

  2. JDBC操作数据库之删除数据

    删除数据使用的SQL语句为delete语句,如果删除图书id为1的图书信息,其SQL语句为: delete from book where id=1 在实际开发中删除数据通常使用PreparedSta ...

  3. Oracle数据库添加删除主外键

    (一)添加主键 1.表创建的同时,添加主键约束 语法: create table "表名" ( "列名1" 数据类型及长度 constraint "主 ...

  4. Python - Django - form 组件动态从数据库取 choices 数据

    app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...

  5. Hadoop 添加删除数据节点(datanode)

    前提条件: 添加机器安装jdk等,最好把环境都搞成一样,示例可做相应改动 实现目的: 在hadoop集群中添加一个新增数据节点. 1. 创建目录和用户  mkdir -p /app/hadoop gr ...

  6. 向数据库添加中文数据乱码的解决办法(本文使用spring-jdbcTemplate)

    由于编码字符集的不同通常容易导致数据库中文乱码问题,如显示问号. 往往由以下三个方面所造成的 (一):数据库端字符集设置 1.安装mysql时,会有一个数据库编码设置,将其设置为utf-8 2.先设置 ...

  7. 微信小程序云开发-数据库-用户删除数据

    一.在商品详情页添加[删除单条数据]按钮 进入goodDetail.wxml页面,添加[删除单条数据]按钮,绑定点击事件removeGood()  二.进入goodDetail.js文件,定义remo ...

  8. 用存储过程向数据库添加大量数据【mysql】

    预分配ID的设计,需要先为数据库生成大量的数据.比如对用户ID有要求的系统,那么用户ID就要预先生成. 通过python,php,c/c++/c#,js等程序生成也是可以,但需要这些程序环境,而且单条 ...

  9. 数据库当中删除数据后主键id不连续的问题

    新建查询: ALTER TABLE `表名` DROP `主键名`;ALTER TABLE `表名` ADD `主键名` int NOT NULL FIRST;ALTER TABLE `表名` MOD ...

  10. WPF XML序列化保存数据 支持Datagrid 显示/编辑/添加/删除数据

    XML序列化保存数据 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

随机推荐

  1. 帆软FineReport报表由于使用HTML显示后无法控制行高

    问题:帆软FineReport报表由于使用HTML显示后无法控制行高. 原因:首先每行的第一个单元格是以HTML显示的,然后,数据库查询的数据集中,sql语句中包含这个代码:'<pre>' ...

  2. 3.Sprint 代理对象与原始对象的异常错误

    代码案例分析 Service层添加了注解@Transactional @Service @Transactional public class CustomerService extends Base ...

  3. Liunx 如何查看80端口被哪个程序所占用

    场景:启服务时一直报80端口被占用 解决方: 1.首先查看下 80 端口的使用情况 netstat -anp|grep 80 查看80端口被被占用的PID 2.根据这个PID 来查看被哪个程序在使用 ...

  4. 以java实现的一个简单登录界面(带验证码)

    本文参考于:https://blog.csdn.net/wyf2017/article/details/78831744 https://blog.csdn.net/MengKun822/articl ...

  5. MySQL部分语法

    MySQL 1.先进入到d盘根目录(自己安装MySQL的盘符) cd d:\2.输入net start mysql3.在d盘的根目录下输入mysql -u root -p就可以进入mysql的命令提示 ...

  6. 被动信息收集-其他收集目标信息的途径:cupp、 recon-ng

    除了google等搜索收集,还有其他途径进行信息收集,其中就包括用命令行或集成的软件.框架进行搜集信息. 1.先举例几个简单的命令: 其实也会是调用搜索引擎,如谷歌必应等,需要翻墙,可以用proxyc ...

  7. 「Luogu1402」酒店之王

    传送门 Luogu 解题思路 网络流板子题. 建图细节见代码,也可以参考这道差不多的题 细节注意事项 咕咕咕. 参考代码 #include <algorithm> #include < ...

  8. app开屏广告

    最近公司有个需求需要做app开屏广告(跳转到不同的页面)--下面是app开屏广告的处理 1.管理后台效果图 (1)广告链接--商品详情 (2)广告链接--关联模块 (3)广告链接--消息富文本 (4) ...

  9. 常见加密解密 -- pycryptodomex库

    安装 windows pip install pycryptodomex ubuntu pip install pycryptodome 加密方式 单向加密:MD5 只能对数据进行加密,而不能解密 对 ...

  10. 096、Java中String类之手工入对象池操作

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...