出版社的查增删改
阅读目录:
一、首先设置app中的models
from django.db import models class Publisher(models.Model): pid = models.AutoField(primary_key=True) # 主键 name = models.CharField(max_length=32, unique=True) # varchar(32) def __str__(self): return self.name
二、urls的操作
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^publisher/', views.publisher), url(r'^add_publisher/', views.add_publisher), url(r'^del_publisher/', views.del_publisher), url(r'^edit_publisher/', views.edit_publisher), ]
三、app中的views 及 templates 的设置
查操作
views 函数
# 展示出版社列表 def publisher(request): # 从数据库获取到所有的数据 all_publisher = models.Publisher.objects.all().order_by('pid') # 返回一个包含数据的页面 return render(request, 'publisher.html', {"all_publisher": all_publisher})
templates
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>出版社列表</title> </head> <body> <h1>出版社列表</h1> <a href="/add_publisher/">添加</a> # 添加操作 <table border="1"> <thead> <tr> <th>序号</th> <th>名称</th> <th>操作</th> </tr> </thead> <tbody> {% for i in all_publisher %} #利用for循环取每一个对象 <tr> <td>{{ forloop.counter }}</td> #序号 <td>{{ i.name }}</td> <td> <a href="/del_publisher/?pk={{ i.pk }}">删除</a> #删除操作 <a href="/edit_publisher/?pk={{ i.pk }}">编辑</a> #编辑操作 </td> </tr> {% endfor %} </tbody> </table> </body> </html>
增操作
views 函数
# 添加出版社 def add_publisher(request): err_msg, new_name = '', '' # 区分请求方式 if request.method == 'POST': # 获取提交的名称 new_name = request.POST.get('new_name', '').strip() if not new_name: # 提交的是空的字符串 err_msg = '不能为空' # 判读新的名字在数据库中是否存在 obj_list = models.Publisher.objects.filter(name=new_name) if obj_list: # 数据库中已存在数据,返回错误提示 err_msg = '数据已存在' if new_name and not obj_list: # 数据不为空,且数据中不存在 # 插入到数据库中 ret = models.Publisher.objects.create(name=new_name) # print(ret, type(ret)) # 跳转到显示页面 return redirect('/publisher/') # 返回一个包含form表单的页面 return render(request, 'add_publisher.html', {'err_msg': err_msg, 'new_name': new_name})
templates
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>添加出版社</title> </head> <body> <form action="" method="post"> <p> 名称:<input type="text" name="new_name" value="{{ new_name }}"> <span>{{ err_msg }}</span> </p> <button>提交</button> </form> </body> </html>
删操作:
views 函数
# 删除出版社 def del_publisher(request): # 获取删除的数据的PK pk = request.GET.get('pk') if not models.Publisher.objects.filter(pid=pk): return HttpResponse('不合法的请求') # 去数据库删除数据 models.Publisher.objects.get(pid=pk).delete() # 跳转到展示页面 return redirect('/publisher/')
改操作
views 函数
# 编辑出版社 def edit_publisher(request): err_msg = '' # 获取要修编辑的数据 pk = request.GET.get('pk') obj_list = models.Publisher.objects.filter(pk=pk) if not obj_list: return HttpResponse('不合法的请求') obj = obj_list[0] # 区分请求方式 if request.method == 'POST': # 修改数据 new_name = request.POST.get('new_name', '').strip() if not new_name: err_msg = '不能为空' obj_list = models.Publisher.objects.filter(name=new_name) if obj_list: err_msg = '数据已存在' if new_name and not obj_list: # 数据不为空 且 数据库不存在 才可以修改 obj.name = new_name obj.save() # 跳转到展示页面 return redirect('/publisher/') return render(request, 'edit_publisher.html', {'obj': obj,'err_msg':err_msg})
templates
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>编辑出版社</title> </head> <body> <form action="" method="post"> <p> 名称:<input type="text" name="new_name" value="{{ obj.name }}"> <span>{{ err_msg }}</span> </p> <button>提交</button> </form> </body> </html>