注意点一:

url里面的地址,不只是html页面,准确说是views视图里面对应的函数方法

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
  6. <title>出版社列表</title>
  7. </head>
  8. <body>
  9. <div class="container">
  10. <div class="row">
  11. <div class="col-md-6 col-md-offset-3">
  12. <h2>出版社列表</h2>
  13. <table class="table table-condensed">
  14. <thead>
  15. <tr>
  16. <th>ID</th>
  17. <th>出版社名称</th>
  18. <th>出版社地址</th>
  19. <th>邮箱</th>
  20. <th>操作</th>
  21. </tr>
  22. </thead>
  23. <tbody>
  24. {% for publish in publish_list %}
  25. <tr>
  26. <td>{{ forloop.counter }}</td>
  27. <td>{{ publish.name}}</td>
  28. <td>{{ publish.addr }}</td>
  29. <td>{{ publish.email }}</td>
  30. <td>
  31.  
  32. <!--定义2个链接,点击之后实质是向服务端又提交了一个get请求,并且把对应那天数据的nid发送给服务端-->
  33. <!--get方式携带参数到后台,例如?nid=123&name=yzz(后面可以跟多个),但是nid是唯一的,所以用nid-->
  34. <!--会触发视图里面的删除方法,将要删除数据的nid当做参数传入-->
  35. <a href="/delete_publish/?nid={{ publish.nid }}" class="btn btn-danger">删除</a>
  36. <a href="/edit_publish/?nid={{ publish.nid }}" class="btn btn-success">编辑</a>
  37. </td>
  38. </tr>
  39.  
  40. {% endfor %}
  41.  
  42. </tbody>
  43. </table>
  44.  
  45. </div>
  46. </div>
  47. </div>
  48. </body>
  49. </html>

publish_list.py配置辅助理解

 注意点二:

1.views.py里面配置的视图函数

2.注意get带参数的请求与post请求

3.多对多产生第三张表的方法,已经默认建好之后表的名字和字段的名字

  1. from django.shortcuts import render,HttpResponse,redirect
  2.  
  3. # Create your views here.
  4. from app01.models import *
  5.  
  6. #添加出版社
  7. def add_publish(request):
  8. if request.method=='POST':
  9. name = request.POST.get('name')
  10. addr = request.POST.get('addr')
  11. email = request.POST.get('email')
  12. Publish.objects.create(name=name,addr=addr,email=email)
  13.  
  14. #点击添加后信息重定向到查看出版社列表的方法界面
  15. return redirect('/publish_list/') #跳转到查看界面,可以完成编辑和删除操作
  16.  
  17. #如果是get请求默认就是添加出版社界面
  18. return render(request,"add_publish.html")
  19.  
  20. #查看出版社信息
  21. def publish_list(request):
  22. publish_list=Publish.objects.all()
  23. return render(request,'publish_list.html',{'publish_list':publish_list})
  24.  
  25. #删除出版社信息
  26. def delete_publish(request):
  27. nid=request.GET.get('nid')
  28. print(nid) #是实际数据库里面的id值(不是{ forloop.counter }}页面上看到的设定的自动增长的值)
  29. # 通过filter过滤出nid为传入的nid,删除掉
  30. #filter功能相当与:select * from where id =2;
  31. ret=Publish.objects.filter(nid=nid) #ret是个列表
  32. # 删除这些数据
  33. print(ret) #<QuerySet [<Publish: Publish object>]>
  34. ret.delete()
  35. return redirect('/publish_list/')
  36.  
  37. #编辑出版社信息
  38. def edit_publish(request):
  39. # post请求:是编辑完之后提交数据的请求
  40. if request.method=='POST':
  41. nid=request.POST.get('nid')
  42. name=request.POST.get('name')
  43. addr=request.POST.get('addr')
  44. email=request.POST.get('email')
  45. #先查找,再更新
  46. Publish.objects.filter(pk=nid).update(name=name, addr=addr, email=email)
  47. return redirect('/publish_list/')
  48.  
  49. #Get请求:数据拿过来跳转到编辑页面
  50. nid=request.GET.get('nid')
  51.  
  52. #Publish.objects.filter(nid=nid) 是个列表,类表的第一个值是对象
  53. # aa=Publish.objects.filter(nid=nid)
  54. # print(aa.__dict__) #{'model': <class 'app01.models.Publish'>, '_db': None, '_hints': {},..}
  55. publish=Publish.objects.filter(nid=nid).first() #publish是个对象
  56. print(publish)
  57. return render(request,'edit_publish.html',{'publish':publish})
  58.  
  59. #添加书名信息
  60. def add_book(request):
  61. if request.method=='POST':
  62. name=request.POST.get('name')
  63. price=request.POST.get('price')
  64. pub_date=request.POST.get('pub_date')
  65. #添加表示出版社的id字段
  66. publish_id=request.POST.get('publish')
  67.  
  68. #拿到对应的作者的列表,authors是个对象,传递的是每个对象对应的id号
  69. authors=request.POST.getlist('authors') #authors是个列表
  70. book=Book.objects.create(name=name,price=price,pub_date=pub_date,publish_id=publish_id)
  71.  
  72. #会在书与作者多对多关系产生的第三张表book_authors里面添加表记录
  73. book.authors.add(*authors) #把每个作者的类表id打乱传入
  74.  
  75. return redirect('/book_list/')
  76.  
  77. #默认拿到出版社列表、作者列表
  78. publish_list = Publish.objects.all()
  79. author_list = Author.objects.all()
  80. return render(request,'add_book.html',{'publish_list':publish_list,'author_list':author_list})
  81.  
  82. def book_list(request):
  83. book_list=Book.objects.all()
  84. return render(request,'book_list.html',{'book_list':book_list})
  85.  
  86. def delete_book(request):
  87. nid = request.GET.get('nid')
  88. ret = Book.objects.filter(nid=nid) # ret是个列表
  89. ret.delete()
  90. return redirect('/book_list/')
  91.  
  92. def edit_book(request):
  93. if request.method=='POST':
  94. nid=request.POST.get('nid')
  95. name=request.POST.get('name')
  96. price=request.POST.get('price')
  97. pub_date=request.POST.get('pub_date')
  98. publish_id=request.POST.get('publish')
  99. authors=request.POST.getlist('authors')
  100. Book.objects.filter(pk=nid).update(name=name,price=price,pub_date=pub_date,publish_id=publish_id)
  101. book=Book.objects.filter(pk=nid).first()
  102. #重置authors的值(用于更新到第三张表里面),先删除原纪录再添加
  103. book.authors.set(authors)
  104. #相当于
  105. # book.authors.clear()
  106. # book.authors.add(*authors)
  107. return redirect('/book_list/')
  108.  
  109. nid = request.GET.get('nid')
  110. book=Book.objects.filter(nid=nid).first()
  111. publish_list=Publish.objects.all()
  112. author_list=Author.objects.all()
  113. return render(request,'edit_book.html',{'book':book,'publish_list':publish_list,'author_list':author_list})

views.py

  1. from django.db import models
  2.  
  3. # Create your models here.
  4.  
  5. #出版社数据库指定的字段及类型
  6. class Publish(models.Model):
  7. nid=models.AutoField(primary_key=True)
  8. name=models.CharField(max_length=32)
  9. addr=models.CharField(max_length=64)
  10. # 也是varchar类型
  11. email=models.EmailField()
  12.  
  13. #作者数据中指定的字段及类型
  14. class Author(models.Model):
  15. nid = models.AutoField(primary_key=True)
  16. name=models.CharField(max_length=32)
  17. age=models.IntegerField()
  18.  
  19. #图书数据库指定的字段及类型
  20. class Book(models.Model):
  21. nid = models.AutoField(primary_key=True)
  22. name=models.CharField(max_length=32)
  23. price=models.DecimalField(max_digits=5,decimal_places=2)
  24. pub_date=models.DateField()
  25.  
  26. #建立书与出版社一对多关系
  27. # to后面的那个表,可以不加引号,但是,要在前面定义(即Publish类要写在Book的前面)
  28. publish=models.ForeignKey(to='Publish',to_field='nid') #创建完成表字段会是 publish_id
  29.  
  30. #建立书与作者多对多关系
  31. #作用:针对对对多关系,创建建爱你出第三张表(代替了下面的3行代码)
  32. authors=models.ManyToManyField(to='Author') #这是第三张表的名字:book_authors,包含的字段有book_id author_id
  33.  
  34. # class Book2Author(models.Model):
  35. # nid=models.AutoField(primary_key=True)
  36. # book=models.ForeignKey(to='Book',to_field='nid')
  37. # author=models.ForeignKey(to='Author',to_field='nid')

models.py数据库表的建立

注意点三:templates模本文件下面的一些配置文件

1.注意页面格式的书写

2.注意里面for循环的一个取值

3.get方法传参的应用

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>新增图书</title>
  6. <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
  7. </head>
  8. <body>
  9. <div class="container">
  10. <div class="row">
  11. <div class="col-md-6 col-md-offset-3">
  12. <h2>新增图书</h2>
  13. <form action="/add_book/" method="post">
  14. <input type="hidden" name="nid" class="form-control" value="{{ publish.nid }}">
  15. <p>图书名称:<input type="text" name="name" class="form-control"></p>
  16. <p>价格:<input type="text" name="price" class="form-control" ></p>
  17. <p>出版日期:<input type="date" name="pub_date" class="form-control"></p>
  18. <p>出版社:
  19. <!--循环出出版社列表,让那个让用户进行出版社名字,对应提交的就是对应出版社的id-->
  20. <select name="publish" id="" class="form-control">
  21. {% for publish in publish_list %}
  22. <option value="{{ publish.nid }}">{{ publish.name }}</option>
  23. {% endfor %}
  24. </select>
  25. </p>
  26. <p>作者:
  27. <select name="authors" id="" multiple class="form-control">
  28. {% for author in author_list %}
  29. <option value="{{ author.nid }}">{{ author.name }}</option>
  30.  
  31. {% endfor %}
  32.  
  33. </select>
  34.  
  35. </p>
  36.  
  37. <p><input type="submit" value="提交" class="form-control btn btn-success"></p>
  38.  
  39. </form>
  40.  
  41. </div>
  42. </div>
  43. </div>
  44. </body>
  45. </html>

add_book.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>图书列表</title>
  6. <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
  7. </head>
  8. <body>
  9. <div class="container">
  10. <div class="row">
  11. <div class="col-md-6 col-md-offset-3">
  12. <h2>图书列表</h2>
  13. <table class="table table-condensed">
  14. <thead>
  15. <tr>
  16. <th>ID</th>
  17. <th>书名</th>
  18. <th>价格</th>
  19. <th>出版日期</th>
  20. <th>出版社名称</th>
  21. <th>作者</th>
  22. <th>操作</th>
  23. </tr>
  24. </thead>
  25. <tbody>
  26. {% for book in book_list %}
  27. <tr>
  28. <td>{{ forloop.counter }}</td>
  29. <td>{{ book.name}}</td>
  30. <td>{{ book.price }}</td>
  31. <td>{{ book.pub_date|date:'Y-m-d' }}</td>
  32. <td>{{ book.publish.name }}</td>
  33. <td>
  34. {% for author in book.authors.all %}
  35. {{ author.name }}|
  36. {% endfor %}
  37.  
  38. </td>
  39.  
  40. <td>
  41. <a href="/delete_book/?nid={{ book.nid }}" class="btn btn-danger">删除</a>
  42. <a href="/edit_book/?nid={{ book.nid }}" class="btn btn-success">编辑</a>
  43. </td>
  44. </tr>
  45.  
  46. {% endfor %}
  47.  
  48. </tbody>
  49. </table>
  50.  
  51. </div>
  52. </div>
  53. </div>
  54.  
  55. </body>
  56. </html>

book_list.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>编辑图书</title>
  6. <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
  7. </head>
  8. <body>
  9. <div class="container">
  10. <div class="row">
  11. <div class="col-md-6 col-md-offset-3">
  12. <h2>新增图书</h2>
  13. <form action="/edit_book/" method="post">
  14. <input type="hidden" name="nid" value="{{ book.nid }}">
  15. <p>图书名称:<input type="text" name="name" class="form-control" value="{{ book.name }}"></p>
  16. <p>价格:<input type="text" name="price" class="form-control" value="{{ book.price }}"></p>
  17. <p>出版日期:<input type="date" name="pub_date" class="form-control" value="{{ book.pub_date|date:"Y-m-d" }}"></p>
  18. <p>出版社:
  19. <select name="publish" id="" class="form-control">
  20. <!--判断,编辑时让编辑状态下图书对应的出版社默认就是后台对应的-->
  21. {% for publish in publish_list %}
  22. {% if book.publish == publish %}
  23. <option selected value="{{ publish.nid }}">{{ publish.name }}</option>
  24. {% else %}
  25. <option value="{{ publish.nid }}">{{ publish.name }}</option>
  26. {% endif %}
  27.  
  28. {% endfor %}
  29. </select>
  30. </p>
  31. <p>作者:
  32. <select name="authors" id="" multiple class="form-control">
  33. <!--判断,编辑时让作者一栏和初始状态的书对应-->
  34. {% for author in author_list %}
  35. {% if author in book.authors.all %}
  36. <option selected value="{{ author.nid }}">{{ author.name }}</option>
  37. {% else %}
  38. <option value="{{ author.nid }}">{{ author.name }}</option>
  39. {% endif %}
  40.  
  41. {% endfor %}
  42.  
  43. </select>
  44.  
  45. </p>
  46.  
  47. <p><input type="submit" value="提交" class="form-control btn btn-success"></p>
  48.  
  49. </form>
  50.  
  51. </div>
  52. </div>
  53. </div>
  54. </body>
  55. </html>

edit_book.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>新增出版社</title>
  6. <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
  7. </head>
  8. <body>
  9.  
  10. <div class="container">
  11. <div class="row">
  12. <div class="col-md-6 col-md-offset-3">
  13. <h2>添加出版社</h2>
  14. <form action="/add_publish/" method="post">
  15. <p>出版社名称:<input type="text" name="name" class="form-control"></p>
  16. <p>出版社地址:<input type="text" name="addr" class="form-control"></p>
  17. <p>出版社邮箱:<input type="text" name="email" class="form-control"></p>
  18. <p><input type="submit" value="添加" class="form-control btn btn-success"></p>
  19.  
  20. </form>
  21.  
  22. </div>
  23. </div>
  24. </div>
  25.  
  26. </body>
  27. </html>

add_publish.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
  6. <title>出版社列表</title>
  7. </head>
  8. <body>
  9. <div class="container">
  10. <div class="row">
  11. <div class="col-md-6 col-md-offset-3">
  12. <h2>出版社列表</h2>
  13. <table class="table table-condensed">
  14. <thead>
  15. <tr>
  16. <th>ID</th>
  17. <th>出版社名称</th>
  18. <th>出版社地址</th>
  19. <th>邮箱</th>
  20. <th>操作</th>
  21. </tr>
  22. </thead>
  23. <tbody>
  24. {% for publish in publish_list %}
  25. <tr>
  26. <td>{{ forloop.counter }}</td>
  27. <td>{{ publish.name}}</td>
  28. <td>{{ publish.addr }}</td>
  29. <td>{{ publish.email }}</td>
  30. <td>
  31.  
  32. <!--定义2个链接,点击之后实质是向服务端又提交了一个get请求,并且把对应那天数据的nid发送给服务端-->
  33. <!--get方式携带参数到后台,例如?nid=123&name=yzz(后面可以跟多个),但是nid是唯一的,所以用nid-->
  34. <!--会触发视图里面的删除方法,将要删除数据的nid当做参数传入-->
  35. <a href="/delete_publish/?nid={{ publish.nid }}" class="btn btn-danger">删除</a>
  36. <a href="/edit_publish/?nid={{ publish.nid }}" class="btn btn-success">编辑</a>
  37. </td>
  38. </tr>
  39.  
  40. {% endfor %}
  41.  
  42. </tbody>
  43. </table>
  44.  
  45. </div>
  46. </div>
  47. </div>
  48. </body>
  49. </html>

publish_list.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>修改出版社</title>
  6. <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
  7. </head>
  8. <body>
  9.  
  10. <div class="container">
  11. <div class="row">
  12. <div class="col-md-6 col-md-offset-3">
  13. <h2>修改出版社</h2>
  14. <form action="/edit_publish/" method="post">
  15. <!--{{ publish.nid }}:点击编辑时默认显示原来数据,在基础上进行修改-->
  16. <input type="hidden" name="nid" class="form-control" value="{{ publish.nid }}">
  17. <p>出版社名称:<input type="text" name="name" class="form-control" value="{{ publish.name }}"></p>
  18. <p>出版社地址:<input type="text" name="addr" class="form-control" value="{{ publish.addr }}"></p>
  19. <p>出版社邮箱:<input type="text" name="email" class="form-control" value="{{ publish.email }}"></p>
  20. <p><input type="submit" value="修改" class="form-control btn btn-success"></p>
  21.  
  22. </form>
  23.  
  24. </div>
  25. </div>
  26. </div>
  27. </body>
  28. </html>

edit_publish.html

Django创建并连接数据库(实现增删改查)--第二版的更多相关文章

  1. Django 自带的ORM增删改查

     通过Django来对数据库进行增删改查 1 首先创建类,在app应用程序里面的model模块里面创建类,写好数据库信息,方便我们待会初始化: 2 创建在django项目里面的settings里面添加 ...

  2. 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建

    数据库的创建和sql语句增删改查 1. 载入驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, nam ...

  3. 数据库开发基础-SQl Server 控制数据库的服务+数据库的创建与管理(增删改查)

    控制数据库的服务: 方法一: 1.Windows+R 打开运行  打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...

  4. 使用MVC5+Entity Framework6的Code First模式创建数据库并实现增删改查功能

    此处采用VS2017+SqlServer数据库 一.创建项目并引用dll: 1.创建一个MVC项目 2.采用Nuget安装EF6.1.3 二.创建Model 在models文件夹中,建立相应的mode ...

  5. BitAdminCore框架应用篇:(二)创建一个简单的增删改查模块

    NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/cookie ...

  6. 数据库开发基础-★SQl Server 控制数据库的服务+数据库的创建与管理(增删改查)★

    控制数据库的服务: 方法一: 1.Windows+R 打开运行  打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...

  7. NX二次开发-NX访问SqlServer数据库(增删改查)C#版

    版本:NX9+VS2012+SqlServer2008r2 以前我写过一个NX访问MySQL数据库(增删改查)的文章https://www.cnblogs.com/nxopen2018/p/12297 ...

  8. Django之model基础(增删改查)

    一.ORM 映射关系 表名 <-------> 类名 字段 <-------> 属性 表记录 <------->类实例对象二.创建表(建立模型) 在创建表之前的准备 ...

  9. Django中多表的增删改查操作及聚合查询、F、Q查询

    一.创建表 创建四个表:书籍,出版社,作者,作者详细信息 四个表之间关系:书籍和作者多对多,作者和作者详细信息一对一,出版社和书籍一对多 创建一对一的关系:OneToOne("要绑定关系的表 ...

  10. Django REST framework 五种增删改查方法

    Django-DRF-视图的演变   版本一(基于类视图APIView类) views.py: APIView是继承的Django View视图的. 1 from .serializers impor ...

随机推荐

  1. 使用java来压缩图片

    使用java来压缩图片,简单几句,清清爽爽 使用0.3的压缩比得到的结果如下(从2.8M压缩到268K,且图片的清晰度看不出明显差别): package carlspringtest; import ...

  2. ERwin DM Reverse Engineer 逆向工程介绍

    介绍内容:利用ERwin DM进行对本地 Oracle 数据库的逆向工程 ERwin DM Version:7.3 ERwin DM 提供两种方式的逆向工程方法,分别是基于脚本文件和基于数据库. 下面 ...

  3. Java Object Model(一)

    Java作为OOP语言,抽象性不言而喻.如果需要深入了解Java语言的实现机制,则不得不对Java语言中基础的概念有清晰的了解.今天是我在cnblog上写博客的第一天,希望今天的博客可以是我成为未来& ...

  4. UVA 12898 - And Or 与和或 (思路题)

    思路就是有零一变化的位Or以后一定是1,And以后一定是0:那么如果b的二进制更长那么就把包含a的部分全部置为1或0,如果一样长那么就把不同的部分置为1或0. 今天被这题坑的地方:1默认是int,如果 ...

  5. Paper: TranE

    论文标题:Translating Embeddings for Modeling Multi-relational Data 标题翻译:多元关系数据翻译嵌入建模 摘要: 考虑多元关系数据的实体和关系在 ...

  6. CMDB数据库设计

    title: CMDB 数据库设计 tags: Django --- CMDB数据库设计 具体的资产 服务器表和网卡.内存.硬盘是一对多的关系,一个服务器可以有多个网卡.多个内存.多个硬盘 hostn ...

  7. jenkins+maven+svn 自动化部署

    背景: 公司的web平台使用JAVA写的,但是不是用Tomcat部署的,代码内部自带了Web服务器,所以只需要有JAVA环境,将代码打包上传,启动脚本就可以. 项目是根据pom.xml打包成的是.zi ...

  8. windows charles 抓包https请求

    charles证书     2.设置host和端口 3.浏览器访问即可抓到https的请求  

  9. 【php】【特殊案例】数组调用方法

    As of PHP 5.4.0, you can call any callable stored in a variable. <?php class Foo { static functio ...

  10. python可视化动态图表: 关于pyecharts的sankey桑基图绘制

    最近因工作原因,需要处理一些数据,顺便学习一下动态图表的绘制.本质是使具有源头的流动信息能够准确找到其上下级关系和流向. 数据来源是csv文件 导入成为dataframe之后,列为其车辆的各部件供应商 ...