Django小练习(3)-实现数据库增删改查

此篇在Django小练习(2)的基础上增加对书籍的添加,删除,修改,查询功能,原理和练习2一致,主要是增加新的模板和视图方法。

1.创建模板

总共有3个页面

Django小练习(3)-实现数据库增删改查_第1张图片

detail.html

Book List

{% for book in book_list.all %} {% endfor %}
书名 作者 出版社 出版日期
{ {book.name}} { {book.author}} { {book.pub_house}} { {book.pub_date}} 删除

查询

{% csrf_token %}

书名:

添加

{% csrf_token %}

书名:

作者:

出版社:

编辑

{% csrf_token %}

书名:

作者:

出版社:

notFound.html

Book List Empty

search.html

查询结果

{% for book in book_list.all %} {% endfor %}
书名 作者 出版社 出版日期
{ {book.name}} { {book.author}} { {book.pub_house}} { {book.pub_date}}

2.创建视图

#V 视图,负责业务逻辑,并在适当时候调用模型model和模板Template,myblog/lib/views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import Book
from django.http import HttpResponseRedirect
from django.urls import reverse

def index(request):
	return HttpResponse("Hello,world!\n Welcome to django!")
	
def detail(request):
	book_list=Book.objects.order_by('-pub_date')[:5]#展示最新的5条记录
	context={'book_list':book_list}
	return render(request,'lib/detail.html',context)
	
def addBook(request):
	if request.method=='POST':
		temp_name=request.POST['name']
		temp_author=request.POST['author']
		temp_pub_house=request.POST['pub_house']
	
	from django.utils import timezone
	temp_book=Book(name=temp_name,author=temp_author,pub_house=temp_pub_house,pub_date=timezone.now())
	temp_book.save()
	
	return HttpResponseRedirect(reverse('lib:detail'))
	
def deleteBook(request,book_id):
	bookID=book_id
	Book.objects.filter(id=bookID).delete()
	return HttpResponseRedirect(reverse('lib:detail'))
	
def searchBook(request):
	if request.method=='POST':
		bookName=request.POST['name']
	book_list=Book.objects.filter(name__icontains=bookName)#名字中包含bookName并不区分大小写
	if book_list:	
		context={'book_list':book_list}
		return render(request,'lib/search.html',context)
	else:
		return render(request,'lib/notFound.html')
	
def editBook(request):
	if request.method=='POST':
		temp_name=request.POST['name']
		temp_author=request.POST['author']
		temp_pub_house=request.POST['pub_house']

	twz = Book.objects.get(name=temp_name)
	print(twz)
	if twz:
		twz.author=temp_author
		twz.pub_house=temp_pub_house
		twz.save() 	
		return HttpResponseRedirect(reverse('lib:detail'))
	else:
		return render(request,'lib/notFound.html')

3.绑定链接

#URL分发器的作用是将页面请求分发给不同的视图(View)处理,视图再调用相应的模型(Model)和模板(Template)。myblog/myblog/urls.py

from django.urls import path
from . import views

app_name='lib'
urlpatterns=[
	path('',views.index,name='index'),
	path('detail/',views.detail,name='detail'),
	path('addBook/',views.addBook,name='addBook'),
	path('delBook/',views.deleteBook,name='delBook'),
	path('searchBook/',views.searchBook,name='searchBook'),
	path('editBook/',views.editBook,name='editBook'),
	]

4.运行项目

打开网页:http://127.0.0.1:8000/lib/detail/,显示如下:

Django小练习(3)-实现数据库增删改查_第2张图片

你可能感兴趣的:(Django)