django 项目之图书管理系统

一:图书管理首页展示

  • 1.设计数据库字段

在models.py文件中设计表字段

from django.db import models

Create your models here.

from django.db import models

Create your models here.

class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=8,decimal_places=2)
publish_date = models.DateField(auto_now_add=True)
# 一对多
publish = models.ForeignKey(to='Publish')
# 多对多
authors = models.ManyToManyField(to='Author')

def str(self):
return self.title

class Publish(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=64)
email = models.EmailField()
# varchar(254) 该字段类型不是给models看的 而是给后面我们会学到的校验性组件看的

def str(self):
return '对象:%s'%self.name

class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
# 一对一
author_detail = models.OneToOneField(to='AuthorDetail')

class AuthorDetail(models.Model):
phone = models.BigIntegerField() # 电话号码用BigIntegerField或者直接用CharField
addr = models.CharField(max_length=64)

  • 2进行数据库的更改

在seetings配置文件中
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day65',
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':'admin123',
'CHARSET':'utf8'
}
}

在随意的__init__ 文件下
import pymysql
pymysql.install_as_MySQLdb()

执行数据库的迁移指令
python manage.py makemigrations

python manage.py migrate

  • 3.首页的搭建

url.py 文件

from app01 import views

url(r'^$',views.home,home='home')
views.py 文件

def home(request)
return render(request,'home.html')

在templates文件夹下新建html文件

该html文件就是对应的前端页面

  • 4图书列表的展示代码

url.py 路由部分
url(r'^book/list/',views.book_list,name='book_list')

图书的展示代码 views.py

from app01 import models
def book_list(request):
#先查询出所有的数据信息 传递给html页面
book_queryset=models.Book.objects.all()
return render(request,'book_list',locals())

对应的前端代码如下

"""
{% extends 'home.html' %}
{% block content %}
添加

















{% for book_obj in book_queryset %}









{% endfor %}

ID 书名 价格 出版日期 出版社 作者 操作
{{ book_obj.pk }} {{ book_obj.title }} {{ book_obj.price }} {{ book_obj.publish_date|date:'Y-m-d' }} {{ book_obj.publish.name }}
{% for author_obj in book_obj.authors.all %}
{% if forloop.last %}
{{ author_obj.name }}
{% else %}
{{ author_obj.name }}、
{% endif %}
{% endfor %}

编辑
删除

{% endblock %}
"""

二:书籍的添加

urls.py

url(r'^book/add/',views,book_add,name='book_add')

views.py

def book_add(request):
return render(request,'book_add.html')

先把settings配置文件中的MIDDLEWARE 中的验证文件的注掉

在views.py

if request.method == 'POST':
#获取前端提交过来的所有数据
title = request.POST.get('titile')
price = request.POST.get('price')
publish_date = request.POST.get('publish_date')
publish_id = request.POST.get('publish')
authors_list = request.POST.get('authors')

操作数据库存储数据

书籍表

book_obj = models.Book.objects.create(title=title,price=price,publish_date=publish_date,publish_id=publish_id)
# 书籍与作者的关系表
book_obj.authors.add(*authors_list)
# 跳转到书籍的展示页面
"""
redirect括号内可以直接写url
其实也可以直接写别名

但是如果你的别名需要额外给参数的话,那么就必须使用reverse解析了
"""
return redirect('book_list')

先获取当前系统中所有出版社信息和作者信息
publish_queryset =models.Publish.objects.all()
author_queryset=models.Author.objects.all()
return render(request,'book_add.html',locals())

book_add.html

{% extends 'home.html' %}
{% block content %}

书籍添加



书名:


价格:


出版日期:


出版社:


作者:



三:书籍的编辑

url.py

url(r'book/edit/(?P<edit_id>\d+)',views.book_edit,name="book_edit")

views.py

def book_edit(request,edit_id):
# 获取当前用户想要编辑的书籍对象 展示给用户看
edit_obj = models.Book.objects.filter(pk=edit_id).first()
if request.method == 'POST':
title = request.POST.get("title")
price = request.POST.get("price")
publish_date = request.POST.get("publish_date")
publish_id = request.POST.get("publish")
authors_list = request.POST.getlist("authors") # [1,2,3,4,]
models.Book.objects.filter(pk=edit_id).update(title=title,
price=price,
publish_date=publish_date,
publish_id=publish_id
)
# 该第三张关系表
edit_obj.authors.set(authors_list)
return redirect('book_list')

publish_queryset = models.Publish.objects.all()
author_queryset = models.Author.objects.all()
return render(request,'book_edit.html',locals())

然后就是对应的html

{% extends 'home.html' %}

{% block content %}

书籍编辑



书名:


价格:


出版日期:


出版社:


作者:



四:书籍的删除

url.py

url(r'^book/delete/(\d+)/',views.book_delete,name="book_delete")

views.py

def book_delete(request,delete_id):
# 简单粗暴 直接删除
models.Book.objects.filter(pk=delete_id).delete()
# 直接跳转到展示页
return redirect('book_list')

posted @ 2021-04-29 20:11  meng神  阅读(239)  评论(0)    收藏  举报