python框架之Django(2)-简单的CRUD
写一个简单的项目小例子来了解Django中的O/RM操作
前戏
创建app
#在Django项目根目录下执行 python3 manage.py startapp [app name]
配置数据库连接信息
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型'HOST': '127.0.0.1', # 连接数据库的地址'PORT': 3306, # 端口'NAME': "testdb", # 数据库名称'USER': 'root', # 用户'PASSWORD': 'root' # 密码 } }
/[project name]/settings.py->DATABASES节
让Django用pymysql来代替默认的MySQLdb
import pymysql pymysql.install_as_MySQLdb()
/[project name]/__init__.py
让项目'知道'APP
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','login_app.apps.LoginAppConfig' ]
/[project name]/settings.py->INSTALLED_APPS节
表关系
代码
创建模型
在app下面的models.py文件中定义类,这些类必须继承models.Model
1 from django.db import models 2 3 4 class Press(models.Model): 5 ''' 6 出版社 7 ''' 8 id = models.AutoField(primary_key=True) 9 name = models.CharField(max_length=50, unique=True) 10 11 12 class Book(models.Model): 13 ''' 14 书籍 15 ''' 16 id = models.AutoField(primary_key=True) 17 name = models.CharField(max_length=50, unique=True) 18 press = models.ForeignKey(Press) 19 20 21 class Author(models.Model): 22 ''' 23 作者 24 ''' 25 id = models.AutoField(primary_key=True) 26 name = models.CharField(max_length=50, unique=True) 27 book = models.ManyToManyField(Book)
/[app name]/models.py
执行命令
python3 manage.py makemigrations # 对比模型和db的差异,记录下将要发生的变更
python3 manage.py migrate # 将记录的变更在数据库中执行
CRUD操作
出版社(一对多)
1 from django.shortcuts import render, HttpResponse, redirect 2 from bookapp import models 3 4 def add(request): 5 ''' 6 添加 7 ''' 8 if request.method == 'POST': 9 name = request.POST.get('name') 10 models.Press.objects.create(name=name).save() 11 return redirect('/list_press/') 12 return render(request, 'press/add.html') 13 14 15 def list(request): 16 ''' 17 列表 18 ''' 19 all_list = models.Press.objects.all() 20 return render(request, 'press/list.html', {'list': all_list}) 21 22 23 def edit(request): 24 ''' 25 编辑 26 ''' 27 if request.method == 'POST': 28 id = request.POST.get('id') 29 name = request.POST.get('name') 30 obj = models.Press.objects.get(id=id) 31 obj.name = name 32 obj.save() 33 return redirect('/list_press/') 34 id = request.GET.get('id') 35 obj = models.Press.objects.get(id=id) 36 return render(request, 'press/edit.html', {'press': obj}) 37 38 39 def delete(request): 40 ''' 41 删除 42 ''' 43 id = request.GET.get('id') 44 models.Press.objects.get(id=id).delete() 45 return redirect('/list_press/')
/[app name]/service/press.py
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>添加出版社</title> 6 </head> 7 <body> 8 <form action="/add_press/" method="post"> 9 <p>名称:<input name="name" type="text"></p> 10 <p><input type="submit" value="提交"></p> 11 </form> 12 </body> 13 </html>
/templates/press/add.html 添加出版社页
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>出版社列表</title> 6 </head> 7 <body> 8 <a href="/add_press/">添加</a> 9 <table border="1" style="border-collapse:collapse;"> 10 <tr> 11 <td>序号</td> 12 <td>名称</td> 13 <td>拥有书籍</td> 14 <td colspan="2">操作</td> 15 </tr> 16 {% for press in list %} 17 <tr> 18 <td>{{ forloop.counter }}</td> 19 <td>{{ press.name }}</td> 20 <td>{% for book in press.book_set.all %} 21 {% if forloop.counter == press.book_set.all.count %} 22 {{ book.name }} 23 {% else %} 24 {{ book.name }}, 25 {% endif %} 26 {% endfor %}</td> 27 <td><a href="/edit_press/?id={{ press.id }}">编辑</a></td> 28 <td><a href="/del_press/?id={{ press.id }}">删除</a></td> 29 </tr> 30 {% endfor %} 31 </table> 32 </body> 33 </html>
/templates/press/list.html 出版社列表页
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>修改出版社</title> 6 </head> 7 <body> 8 <form action="/edit_press/" method="post"> 9 <input type="hidden" name="id" value="{{ press.id }}"> 10 <p>名称:<input name="name" type="text" value="{{ press.name }}"></p> 11 <p><input type="submit" value="提交"></p> 12 </form> 13 </body> 14 </html>
/templates/press/edit.html 编辑出版社页
书籍(多对一&多对多)
1 from django.shortcuts import render, HttpResponse, redirect 2 from bookapp import models 3 4 5 def add(request): 6 ''' 7 添加 8 ''' 9 if request.method == 'POST': 10 press_id = request.POST.get('press_id') 11 name = request.POST.get('name') 12 models.Book.objects.create(name=name, press_id=press_id).save() 13 return redirect('/list_book/') 14 press_list = models.Press.objects.all() 15 return render(request, 'book/add.html', {'press_list': press_list}) 16 17 18 def list(request): 19 ''' 20 列表 21 ''' 22 all_list = models.Book.objects.all() 23 return render(request, 'book/list.html', {'list': all_list}) 24 25 26 def edit(request): 27 ''' 28 编辑 29 ''' 30 if request.method == 'POST': 31 id = request.POST.get('id') 32 name = request.POST.get('name') 33 press_id = request.POST.get('press_id') 34 obj = models.Book.objects.get(id=id) 35 obj.name = name 36 obj.press_id = press_id 37 obj.save() 38 return redirect('/list_book/') 39 id = request.GET.get('id') 40 obj = models.Book.objects.get(id=id) 41 press_list = models.Press.objects.all() 42 return render(request, 'book/edit.html', {'book': obj, 'press_list': press_list}) 43 44 45 def delete(request): 46 ''' 47 删除 48 ''' 49 id = request.GET.get('id') 50 models.Book.objects.get(id=id).delete() 51 return redirect('/list_book/')
/[app name]/service/book.py
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>添加书籍</title> 6 </head> 7 <body> 8 <form action="/add_book/" method="post"> 9 <p>名称:<input name="name" type="text"></p> 10 <p>出版社: <select name="press_id" > 11 {% for press in press_list %} 12 <option value="{{ press.id }}">{{ press.name }}</option> 13 {% endfor %} 14 </select></p> 15 <p><input type="submit" value="提交"></p> 16 </form> 17 </body> 18 </html>
/templates/book/add.html 添加书籍页
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>书籍列表</title> 6 </head> 7 <body> 8 <a href="/add_book/">添加</a> 9 <table border="1" style="border-collapse:collapse;"> 10 <tr> 11 <td>序号</td> 12 <td>名称</td> 13 <td>出版社</td> 14 <td colspan="2">操作</td> 15 </tr> 16 {% for book in list %} 17 <tr> 18 <td>{{ forloop.counter }}</td> 19 <td>{{ book.name }}</td> 20 <td>{{ book.press.name }}</td> 21 <td><a href="/edit_book/?id={{ book.id }}">编辑</a></td> 22 <td><a href="/del_book/?id={{ book.id }}">删除</a></td> 23 </tr> 24 {% endfor %} 25 </table> 26 </body> 27 </html>
/templates/book/list.html 书籍列表页
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>修改书籍</title> 6 </head> 7 <body> 8 <form action="/edit_book/" method="post"> 9 <input type="hidden" name="id" value="{{ book.id }}"> 10 <p>名称:<input name="name" type="text" value="{{ book.name }}"></p> 11 <p>出版社: 12 <select name="press_id"> 13 {% for press in press_list %} 14 {% if book.press.id == press.id %} 15 <option selected value="{{ press.id }}">{{ press.name }}</option> 16 {% else %} 17 <option value="{{ press.id }}">{{ press.name }}</option> 18 {% endif %} 19 {% endfor %} 20 </select> 21 </p> 22 <p><input type="submit" value="提交"></p> 23 </form> 24 </body> 25 </html>
/templates/book/edit.html 编辑书籍页
作者(多对多)
1 from django.shortcuts import render, HttpResponse, redirect 2 from bookapp import models 3 4 5 def add(request): 6 ''' 7 添加 8 ''' 9 if request.method == 'POST': 10 book_id_list = request.POST.getlist('book_id_list') 11 print(book_id_list) 12 name = request.POST.get('name') 13 author = models.Author.objects.create(name=name) 14 author.book = book_id_list 15 author.save() 16 return redirect('/list_author/') 17 book_list = models.Book.objects.all() 18 return render(request, 'author/add.html', {'book_list': book_list}) 19 20 21 def list(request): 22 ''' 23 列表 24 ''' 25 all_list = models.Author.objects.all() 26 return render(request, 'author/list.html', {'list': all_list}) 27 28 29 def edit(request): 30 ''' 31 编辑 32 ''' 33 if request.method == 'POST': 34 id = request.POST.get('id') 35 name = request.POST.get('name') 36 book_id_list = request.POST.getlist('book_id_list') 37 obj = models.Author.objects.get(id=id) 38 obj.name = name 39 obj.book = book_id_list 40 obj.save() 41 return redirect('/list_author/') 42 id = request.GET.get('id') 43 obj = models.Author.objects.get(id=id) 44 book_list = models.Book.objects.all() 45 return render(request, 'author/edit.html', {'author': obj, 'book_list': book_list}) 46 47 48 def delete(request): 49 ''' 50 删除 51 ''' 52 id = request.GET.get('id') 53 models.Author.objects.get(id=id).delete() 54 return redirect('/list_author/')
/[app name]/service/author.py
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>添加作者</title> 6 </head> 7 <body> 8 <form action="/add_author/" method="post"> 9 <p>姓名:<input name="name" type="text"></p> 10 <p>拥有书籍: <select name="book_id_list" multiple> 11 {% for book in book_list %} 12 <option value="{{ book.id }}">{{ book.name }}</option> 13 {% endfor %} 14 </select></p> 15 <p><input type="submit" value="提交"></p> 16 </form> 17 </body> 18 </html>
/templates/author/add.html 添加作者页
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>作者列表</title> 6 </head> 7 <body> 8 <a href="/add_author/">添加</a> 9 <table border="1" style="border-collapse:collapse;"> 10 <tr> 11 <td>序号</td> 12 <td>姓名</td> 13 <td>拥有书籍</td> 14 <td colspan="2">操作</td> 15 </tr> 16 {% for author in list %} 17 <tr> 18 <td>{{ forloop.counter }}</td> 19 <td>{{ author.name }}</td> 20 <td>{% for book in author.book.all %} 21 {% if forloop.counter == author.book.count %} 22 {{ book.name }} 23 {% else %} 24 {{ book.name }}, 25 {% endif %} 26 {% endfor %} 27 </td> 28 <td><a href="/edit_author/?id={{ author.id }}">编辑</a></td> 29 <td><a href="/del_author/?id={{ author.id }}">删除</a></td> 30 </tr> 31 {% endfor %} 32 </table> 33 </body> 34 </html>
/templates/author/list.html 作者列表页
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>修改作者</title> 6 </head> 7 <body> 8 <form action="/edit_author/" method="post"> 9 <input type="hidden" name="id" value="{{ author.id }}"> 10 <p>姓名:<input name="name" type="text" value="{{ author.name }}"></p> 11 <p>拥有书籍: 12 <select name="book_id_list" multiple> 13 {% for book in book_list %} 14 {% if book in author.book.all %} 15 <option selected value="{{ book.id }}">{{ book.name }}</option> 16 {% else %} 17 <option value="{{ book.id }}">{{ book.name }}</option> 18 {% endif %} 19 {% endfor %} 20 </select> 21 </p> 22 <p><input type="submit" value="提交"></p> 23 </form> 24 </body> 25 </html>
/templates/author/edit.html 编辑作者页
配置路由
1 from django.shortcuts import render, HttpResponse, redirect 2 from bookapp.service import press 3 from bookapp.service import book 4 from bookapp.service import author
/[app name]/views.py
1 from django.conf.urls import url 2 from django.contrib import admin 3 4 from django.conf.urls import url 5 from bookapp import views 6 urlpatterns = [ 7 url(r'^add_press/', views.press.add), 8 url(r'^list_press/', views.press.list), 9 url(r'^edit_press/', views.press.edit), 10 url(r'^del_press/', views.press.delete), 11 url(r'^add_book/', views.book.add), 12 url(r'^list_book/', views.book.list), 13 url(r'^edit_book/', views.book.edit), 14 url(r'^del_book/', views.book.delete), 15 url(r'^add_author/', views.author.add), 16 url(r'^list_author/', views.author.list), 17 url(r'^edit_author/', views.author.edit), 18 url(r'^del_author/', views.author.delete), 19 ]
/[project name]/urls.py
点击下载完整示例
转载于:https://www.cnblogs.com/zze46/p/10531264.html
python框架之Django(2)-简单的CRUD相关推荐
- Python 框架 之 Django MVT 下的 T 的 模板简单介绍和使用
Python 框架 之 Django MVT 下的 T 的 模板简单介绍和使用 目录
- Python 框架 之 Django MVT 下的 V 的 视图简单介绍和使用
Python 框架 之 Django MVT 下的 V 的 视图简单介绍和使用 目录
- Python 框架 之 Django MVT 下的 M 的 模型的简单介绍和使用
Python 框架 之 Django MVT 下的 M 的 模型的简单介绍和使用 目录
- Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤)
Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤) 目录
- python爬虫框架排行榜-哪种Python框架适合你?简单介绍几种主流Python框架
众所周知,Python开发框架大大减少了开发者不必要的重复劳动,提高了项目开发效率的同时,还使得创建的程序更加稳定.目前比较主流的Python框架都有哪些呢?一般大家用的比较多的是Django.Fla ...
- Python框架:Django写图书管理系统(LMS)
今天我会带大家真正写一个Django项目,对于入门来说是有点难度的,因为逻辑比较复杂,但是真正的知识就是函数与面向对象,这也是培养用Django思维写项目的开始 Django文件配置 Django模版 ...
- python框架03 -- Django综述
简介 主要内容: Django运用.序列化.前后端分离.数据库连接.token头.数据交互 更新: 不定期更新,遇到相关问题则会添加到其中,若有问题请留言或者右下角直接联系 虚拟环境安装 安装 安装p ...
- 使用idea搭建ssm框架,并实现简单的CRUD和分页查询功能
1.使用idea搭建ssm框架步骤,请参考本人博客 2.项目搭建好,创建以下目录 3.在pom.xml文件中引入依赖 <?xml version="1.0" encoding ...
- python框架django入门_Python高级进阶(一)Python框架之Django入门
姓名:{{name}} 爱好: {% for hobby in hobby_list %} {{hobby}}{% endfor %}
最新文章
- 服务器系统日志4625,win2008 r2 成千上万的“审核失败”日志 事件ID 4625
- php 简单路由实现
- Java中的条件编译
- Apache Log4j2 RCE 命令执行漏洞预警及修复方案
- 赞!超炫的页面切换动画效果【附源码下载】
- 开发服务器 VSS开发库 自动备份方案
- [转]服务器监控 UptimeRobot 简明使用手册
- el-jy-ii计算机组成原理实验报告,EL-JY-II型计算机组成原理实验系统
- 邮件归档提升信息价值(上)
- DisplayUtils
- # AD19规则设置的傻瓜式教程
- 织梦的网站地图怎么做html,织梦自带网站地图的生成制作方法详解
- 地球经纬度java语言表示_java根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)-Go语言中文社区...
- web buuctf [BJDCTF2020]Mark loves cat1
- 再见了青春,联想Y450最后一次升级,真的神一般存在。
- Android硬件开发------计步传感器
- 生产者消费者2.0(lock)
- strtok、strtok_s、strtok_r 字符串分割函数
- Games201学习笔记3:欧拉视角
- 【转载】网站关闭了域名备案信息是否需要注销,答案是一定要记得注销域名备案信息