首页Django

Django图书管理系统(数据库增删改查)

2020年9月13日 20:0420

使用Django制作一个简单的图书管理系统,包含作者管理、出版社管理、图书管理功能。

#  开发环境

Python:3.80
Django:3.0.2
Pycharm:2019

创建项目

创建django项目

创建APP应用

为了增强项目的可读性,我们将图书管理系统分为三个APP,author(作者管理)、publish(出版社管理)、book(图书管理)。

# 在Pycharm中分别执行下面的命令:

python manage.py startapp author   # 创建作者app
python manage.py startapp publish  # 创建出版社app
python manage.py startapp book     # 创建图书app
#  book应用下的models.py

from django.db import models


class Publish(models.Model):
    """出版社模型"""
    name = models.CharField('出版社',max_length=32)
    city = models.CharField('城市',max_length=32)

    class Meta:
        verbose_name = '出版社'
        verbose_name_plural = '出版社管理'

    def __str__(self):
        return self.name


class Author(models.Model):
    """图书作者模型"""
    name = models.CharField('作者',max_length=32)
    mobile = models.CharField('电话',max_length=32)

    class Meta:
        verbose_name = '作者'
        verbose_name_plural = '图书作者'

    def __str__(self):
        return self.name


class Book(models.Model):
    """图书数据模型"""
    title = models.CharField('图书',max_length=64)
    price = models.DecimalField('价格',max_digits=8,decimal_places=2)
    author = models.ManyToManyField('Author',verbose_name='作者')
    publish = models.ForeignKey('Publish',verbose_name='出版社',on_delete=models.CASCADE)
    pub_date = models.DateField('入库日期',auto_now_add=True)

    class Meta:
        verbose_name = '图书'
        verbose_name_plural = '图书管理'

    def __str__(self):
        return self.title

 

创建前端模板

在templates目录下创建前端静态模板,用来接收或传递后端数据。

显示所有作者:author_list.html、新增作者:author_add.html、修改作者:author_edit.html

显示所有出版社:publish_list.html、新增出版社:publish_add.html、编辑出版社:publish_edit.html

显示所有图书:book_list.html、新增图书:book_add.html、编辑图书:book_edit.html

 

# 在pycharm 中依次执行

python manage.py makemigrations
python manage.py migrate
                 

最终生成4张表:book_book(图书表)、book_author(作者表)、book_publish(出版社表)、book_book_author(图书与作者关联表,自动生成)

编写视图函数

视图是MTV设计模式中的V层,它是实现业务逻辑的关键层,可以用来链接M(model)和T(templates),起着纽带般的作用。
在Django中视图函数是一个Python函数或类,开发者主要通过编写视图函数来实现业务逻辑。视图函数首先接收客户端的请求,并返回响应。

# 作者管理的视图函数

from django.shortcuts import render,redirect
from author.models import Author


def author_list(request):
    """显示所有作者"""
    authors = Author.objects.all()
    context = {
        'authors':authors
    }
    return render(request,'author/author_list.html',context)


def author_add(request):
    """新增作者"""
    if request.method == 'POST':
        name = request.POST.get('name')
        mobile = request.POST.get('mobile')
        try:
            Author.objects.create(name=name,mobile=mobile)
            return redirect('/author/')
        except:
            error = '数据出错'
    return render(request,'author/author_add.html')


def author_edit(request,author_id):
    """修改作者"""
    authors = Author.objects.get(pk=author_id)
    if request.method == 'POST':
        name = request.POST.get('name')
        mobile = request.POST.get('mobile')
        authors.name = name
        authors.mobile = mobile
        authors.save()
        return redirect('/author/')
    context = {
        'authors':authors,
    }
    return render(request,'author/author_edit.html',context)


def author_del(request,author_id):
    """删除作者"""
    author_del_list = Author.objects.filter(id=author_id).first()
    if author_del_list:
        author_del_list.delete()
        return redirect('/author/')

设计URL路由

#  项目books下urls.py


from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/',include('book.urls')),  # 引用book应用下的urls文件
    path('author/',include('author.urls')),  # 引用author应用下的urls文件
    path('publish/',include('publish.urls')),  # 应用publish应用下的urls文件
]
# author应用下的urls.py

from django.urls import path
from author import views

urlpatterns = [
    path('',views.author_list,name='author'),  # 作者管理
    path('add/',views.author_add,name='author_add'),  # 新增作者
    path('edit/<int:author_id>',views.author_edit,name='author_edit'),  # 修改作者
    path('del/<int:author_id>',views.author_del,name='author_del'),  # 删除作者
]