django建立图书管理系统

需求:创建一个简单的图书管理系统包含图书,作者,出版社
其中出版社与图书:一对多关系
作者与图书:多对多关系
前面常规的配置各种建立模型类

from django,db import models
	# 出版社模型类
	class Publisher(models.Model):
		name = models.CharField(max_length=32)	
		def __str__(self):
		# 可以用其他形式传参,不过一定是__str__传递字符串
			return ''.fromat(self.name)
	# 图书模型类		
	class Book(models.Model):
		title = models.CharField(max_length=32)
		# 定义外键,必须有on_delete参数	CASCADE是联级删除,一起删除
		publisher = models.ForeignKey(to='Publisher',on_delete=models.CASCADE)
		def __str__(self):
			return'',fromat(self.title)
	# 作者图形类	
	class Author(models.Model):
		name =models.CharField(max_length=32)
		# 定义多对多连接
		book =models.ManyTOManyField(to='Book')
		def __str__(self):
			return ''.fromat(self.name)

注:有外键的连接以及on_delete删除模式,多对多连接
视图函数代码
1.1出版社列表

def publisher_list(request):
	# 查询出所有出版社
	publisher_obj_list = models.Publisher.objects.all()
	# 响应
	return render(request, 'app01/publisher_list.html',{'publisher_obj_list':publisher_obj_list})

1.2添加出版社

def publisher_add(request):
	# 获取表单
	n = request.POST.get('name')
	# 保存数据库
	models.Publisher.objects.create(name=n)
	# 重定向到显示界面list
	return redirect('/app01/publisher_list/')

1.3删除出版社

def publisher_delete(request):
	# 获取id
	ids = request.GET.get('id')
	# 查询数据库指定id并删除
	models.Publisher.objects.get(id=ids).delete()
	# 响应重定向的显示界面list
	return redirect('/app01/publisher_list/')

1.4查询出版社

def publisher_edit(request):	
	if request.method =='GET'
	# GET请求
		# 1获取id
		ids = request.GET.get('id')
		# 2查询数据库
		publisher_obj = models.Publisher.objects.get(id=ids)
		# 3返回页面
		return render(request, 'app01/publisher_edit.html',{'publisher_obj':publisher_obj})		
	else:
	# POST请求
		# 1获取表单提交的数据
		ids = request.POST.get('id')
		n = request.POST.get('name')
		# 2查询数据库并修改
		publisher_obj =models.Publisher.objects.get(id=ids)
		publisher_obj.name = n 
		# 3保存修改数据
		publisher_obj.save()
		# 4重定向
		return redirect('/app01/publisher_list/')

注:看注释了解各部分的步骤
后续的图书作者方法与上面大同小异
多对多的html页面略有不同
2.1图书列表

def book_list(request):
	# 1查询出所有图书
	book_obj_list = models.Book.objects.all()
	# 2响应
	return render(request, 'app01/book_list.html',locals())

2.2添加图书

def book_add(request):
	# POST请求
	if request.method == 'POST':
		# 获取表单提交内容
		n = request.POST.get('name')
		pub_id = request.POST.get('publisher_id')
		# 保存数据库
		models.Book.objects.create(
			title = n,
			publisher_id = pub_id	
		)
		# 重定向
		return redirect('/app01/book_list/')
	else:
	# GET请求
		# 获取出版社列表
		publisher_obj_list = models.Publisher.objects.all()
		return render(request,'app01/book_add.html',locals())

2.3图书删除

def book_delete(request):
	# 1获取id
	ids = request.GET.get('id')
	# 2查询图书数据库并删除
	models.Book.objects.get(id=ids).delete()
	# 3重定向
	return redirect('/app01/book_list/')

2.4查询图书

def book_edit(request):
	# GET请求
	if request.method == 'GET':
		# 1获取id
		ids = request.GET.get('id')
		# 2查询书库
		book_obj = models.Book.objects.get(id=ids)
		publisher_obj_list = models.Publisher.objects.all()
		# 3返回页面
		return render(request,'app01/book_edit.html',locals())
	else:
	# POST请求
		# 1获取表单提交内容
		ids = request.POST.get('id')
		n = request.POST.get('name')
		# 2查询书库并修改
		book_obj = models.Book.objects.get(id=ids)
		book_obj.title = n
		book_obj.publisher_id = publisher_id
		# 3save保存
		book_obj.save()
		# 重定向
		return redirect('/app01/book_list/')

3.1作者列表

def author_list(request):
	# 查询数据库
	author_obj_list = models.Author.objects.all()
	'''
	测试代码
	print(author_obj_list[0].book.all())
	'''
	return render(request, 'app01/author_list.html',locals())

3.2添加作者

def author_add(request):
	# POST请求
	if request.method =='POST':
		# 1获取数据
		n = request.POST.get('name')
		book_ids = request.POST.getlist('book_ids')# getlist方法
		# 2保存到数据库
		author_obj = models.Author.objects.create(name= n)
		author_obj.book.set(book_ids)
		# 3重定向
		return redirect('/app01/author_list/')
	else:
	# GET请求
		# 1查询数据库
		book_obj_list = models.Book.objects.all()
		# 2重定向 
		return render(request, 'app01/author_add.html', locals())

3.3删除作者

def author_delete(request):
	# 获取id
	id = request.GET.get('id')
	# 删除数据
	models.Author.objects.get(id= id).delete()
	# 重定向 
	return redirect('/app01/author_list/')

3.4查询作者

def author_edit(request):
	# GET请求
	if request.method.GET.get('id')
		# 1获取id
		id = request.GET.get('id')
		# 2查询数据库
		author_obj = models.Author.objects.get(id= id)
		return render(request,'app01/author_edit.html/,locals())
	else:
	# POST请求
		# 1获取提交过来的数据
		author_id = request.POST.get('id')
		n = request.POST.get('name')
		book_ids = request.POST.getlist('book_ids')
		# 2查询数据库并修改
		author_obj = models.Author.objects.get(id= author_id)
		author_obj.name = n 
		author_obj.book.set(book_ids)
		# 3保存
		author_obj.save()
		# 4重定向
		return redirect('/app01/author_list/')

注:了解save(),set什么时候用
一对多,一般讲关系字段设在多的一方

增加操作:

  • 正向:save()
  • 反向:create()

修改操作:

  • 正向:save()
  • 反向:set()

你可能感兴趣的:(python,Django)