- 这个图书管理系统,是针对于刚刚学完模板语法和ORM单表操作之后的一个小作业
1.1 系统成品预览:
1.2 系统功能介绍:
- 1、新增图书 add_book
- 2、删除图书 delete_book
- 3、修改图书 change_book
- 4、查询图书 books
1.3 开发环境:
2.新建项目Python3.6.5
Pycharm2018专业版
Django3.2.3
Bootstrap.css
- 2.1 新建一个名为book的Django项目文件和名为app01的应用
目录结构:
-
book
- app01: 应用及视图函数目录
- book: 配置文件及全局相关
- templates html文件相关
-
2.2 在MySQL中创建一个名为book的数据库
- 2.3 在全局settings.py文件中,配置数据库,代码如下:
# DATAbaseS = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': base_DIR / 'db.sqlite3',
# }
# }
DATAbaseS = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'book', # 要连接的数据库,连接前需要创建好
'USER': 'root', # 连接数据库的用户名
'PASSWORD': '', # 连接数据库的密码
'HOST': '127.0.0.1', # 连接主机,默认本级
'PORT': 3306 # 端口 默认3306
}
}
注意: 记得把Django默认的数据库注释掉
- 2.4 在book文件夹下,与settings.py同级的__init__.py文件中,加入以下代码:
import pymysql pymysql.install_as_MySQLdb()
- 为什么要加这两行代码
这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb 对于py3有很大问题,所以我们需要的驱动是PyMySQL,让Django能连接到我们的MySQL数据库
- 2.5 在app01目录下,models.py文件中,设计表结构:
from django.db import models
# Create your models here.
class Book(models.Model):
# id = models.AutoField()
title = models.CharField(max_length=32, unique=True)
pub_date = models.DateField()
price = models.DecimalField(max_digits=8, decimal_places=2)
publish = models.CharField(max_length=32)
注意:
要确认在配置文件中的INSTALLED_APPS中写入我们创建的app名称,然后进行数据库迁移
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config',
]
- 2.6 完成上述操作后,进行数据库迁移:
python manage.py makemigrations python manage.py migrate
- 2.7 在全局urls.py文件中,为图书管理系统配置路由:
from django.contrib import admin
from django.urls import path, re_path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('addbook/', views.addbook), # 添加数据url
path('books/', views.books), # 查看书籍url
re_path(r"books/(d+)/delete", views.delbook), # 删除书籍url
re_path(r"books/(d+)/change", views.changebook), # 修改书籍url
]
- 2.8 在views.py文件中,为图书管理系统url路由新建视图函数:
from django.shortcuts import render, HttpResponse, redirect
# Create your views here.
from app01.models import Book
def addbook(request):
"""新增书籍"""
if request.method == 'POST':
try:
title = request.POST.get("title")
price = request.POST.get("price")
date = request.POST.get("date")
publish = request.POST.get("publish")
Book.objects.create(title=title, price=price, pub_date=date, publish=publish)
return redirect("/books/")
except Exception as e:
print(e)
return render(request, 'addbook.html')
def books(request):
"""查看书籍"""
book_list = Book.objects.all()
return render(request, "books.html", locals())
def delbook(request, id):
"""删除书籍"""
Book.objects.filter(id=id).delete()
return redirect("/books/") # 重定向
def changebook(request, id):
"""编辑书籍"""
book_obj = Book.objects.filter(id=id).first()
if request.method == 'POST':
title = request.POST.get("title")
price = request.POST.get("price")
date = request.POST.get("date")
publish = request.POST.get("publish")
Book.objects.filter(id=id).update(title=title, price=price, pub_date=date, publish=publish)
return redirect("/books/") # 重定向
return render(request, 'changebook.html', {"book_obj": book_obj})
- 2.9 在templates文件夹下,为视图函数创建前端页面:
注意: 要在app01目录下创建一个static的静态文件并把Bootstrap.css文件放进去,然后在HTML中引入Bootstrap.css文件
base.html
Title
{# 引入bootstrap #}
{% block header %}
{% endblock %}
在这里,我使用了模板继承语法,所以会有一个base.html文件作为父页面,方便子页面继承
books.html
{% extends 'base.html' %}
{% block header %}
查看书籍
{% endblock %}
changebook.html
{% extends 'base.html' %}
{% block header %}
修改书籍
{% endblock %}
addbook.html
{% extends 'base.html' %}
{% block header %}
添加书籍
{% endblock %}
- 全部代码敲完之后,运行图书管理系统,就能看到第一张图那样子啦!感谢预览,阿巴阿巴…
总结:
- 这个小练习到这里就结束啦!总体还是比较简单的!



