django框架之图书管理系统(代码片段)

fjiqiang fjiqiang     2022-12-10     757

关键词:

图书管理系统共分为两篇博客进行讲解,该篇博客主要记录图书与出版社之间的关系(一对一),记录图书的增删查改操作

==================================================

一、数据库设计

图书管理系统共分为三个角色:图书,出版社,作者

一本书  ========  一个出版社

一本书  ======== 多个作者

一个作者 ======= 多本书

出版社与书之间的关系:一对多的关系   =====》外键

书于作者之间的关系:多对多的关系 =====》用第三张表做关联

=================================================

二、代码部分(只记录代码部分,使用的一些其他操作,可以根据我以前的记录进行学习)

1.创建一个app04模块,作为图书管理系统模块;在系统中注册模板文件夹和静态文件夹

2.创建图书与出版社的模型类,models.py代码如下:

from django.db import models

# Create your models here.

class Publisher(models.Model):
    """
    出版社模型类
    """
    id=models.AutoField(primary_key=True)
    title=models.CharField(max_length=20)


class Books(models.Model):
    """
    图书模型类
    """
    id=models.AutoField(primary_key=True)
    bookname=models.CharField(max_length=24)
    publisher=models.ForeignKey(to="Publisher")

通过两个命令在数据库中创建这两个类的表

3.查

3.1 views.py中代码如下:

def show_bookmanager(request):
    """
    查询所有的图书记录
    :param request:
    :return:
    """
    get_all_books=Books.objects.all() # 通过ORM进行查询所有的数据
    return render(request,"allbooks.html","books":get_all_books)

3.2 项目同名文件夹下的url路径配置,urls.py中代码如下:

urlpatterns = [
    url(r^app04/,include(app04.urls)),
]

3.2 在app04模块下配置url路径,app04/urls.py中代码如下:

urlpatterns=[
    url(r^allbooks/$,show_bookmanager),
]

3.4 前端allbooks.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form>
    <table border="1">
        <tr>
            <td>ID</td>
            <td>book</td>
            <td>publisher</td>
        </tr>
        % for book in books %
        <tr>
            <td> book.id </td>
            <td> book.bookname </td>
            <td> book.publisher.title </td>
        </tr>
        % endfor %
        
    </table>
</form>
</body>
</html>

启动manage.py通过http://127.0.0.1:8000/app04/allbooks/就可以通过浏览器访问图书的所有信息了

通过上述查的例子已经能查出所有的图书信息了,那么下面的步骤基本上和上面一致,就直接进行代码记录,最后总结里面的相关知识点

4.增

4.1 app04/urls.py代码如下:

urlpatterns=[
    url(r^allbooks/$,show_bookmanager),
    url(r^addbook/$,add_bookmanager),
]

4.2 views.py代码如下:

def add_bookmanager(request):
    """
    添加图书信息
    :param request:
    :return:
    """
    # 如果是通过get方法进行请求的数据,查询所有的出版社,用于显示到添加界面,供用户进行选择出版社
    if request.method=="GET":
        all_publisher = Publisher.objects.all()
        return render(request,"addbooks.html","publishers":all_publisher)
    # 如果通过post方法进行请求的数据,获取前端传递过来图书名称、出版社名称,然后插入到数据库中
    if request.method=="POST":
        get_book=request.POST.get(txtbookname,None) # 获取前端传递过来的图书名称
        get_pulisher=request.POST.get(selectpublisher,None) # 获取前端传递过来的出版社名称
        a=Books.objects.create(bookname=get_book,publisher_id=get_pulisher) # 插入数据
        return redirect("/app04/allbooks/") # 通过重定向,显示所有的数据

4.3 前端代码,在allbooks.html中添加一个跳转链接

<a href="/app04/addbook/">添加图书</a>

addbooks.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/app04/addbook/" method="post">
    <input type="text" name="txtbookname"/>&nbsp;
    <select name="selectpublisher">
        % for p in publishers %
            <option value=" p.id "> p.title </option>
        % endfor %
    </select>
    <input type="submit" value="添加"/>
</form>
</body>
</html>

5.删

5.1 app04/urls.py代码如下:

urlpatterns=[
    url(r^allbooks/$,show_bookmanager),
    url(r^addbook/$,add_bookmanager),
    url(r^delete/$,delete_bookmanager),
]

5.2 views.py代码如下:

def delete_bookmanager(request):
    """
    删除图书信息
    :param request: 
    :return: 
    """
    get_id=request.GET.get(id) # 获取前端传递过来的数据
    if get_id:  # 如果获取到了前端传递过来的数据,进行下一步
        delete_book=Books.objects.get(id=get_id) # 通过id获取到对应的图书信息
        delete_book.delete() # 删除对应的信息
    return redirect("/app04/allbooks/")

5.3 前端allbooks.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form>
    <a href="/app04/addbook/">添加图书</a>
    <table border="1">
        <tr>
            <td>ID</td>
            <td>book</td>
            <td>publisher</td>
            <td>operation1</td>
        </tr>
        % for book in books %
        <tr>
            <td> book.id </td>
            <td> book.bookname </td>
            <td> book.publisher.title </td>
            <td><a href="/app04/delete/?id= book.id ">删除</a></td>
        </tr>
        % endfor %
        
    </table>
</form>
</body>
</html>

6.改

6.1 app04/urls.py代码如下:

urlpatterns=[
    url(r^allbooks/$,show_bookmanager),
    url(r^addbook/$,add_bookmanager),
    url(r^delete/$,delete_bookmanager),
    url(r^editor/$,editor_bookmanager),
]

6.2 views.py代码如下:

def editor_bookmanager(request):
    """修改图书信息"""
    if request.method=="GET":
        get_id=request.GET.get(id) # 获取前端传递过来参数为id的数据
        if get_id:
            get_book=Books.objects.get(id=get_id) # 根据id获取到对应的数据信息
            get_publisher=Publisher.objects.all() # 查询出所有的出版社信息
            return render(request,"editorbooks.html","book":get_book,"publishers":get_publisher)
        else:
            return redirect("/app04/allbooks/")
    if request.method=="POST":
        get_id=request.POST.get(updateid)
        get_name=request.POST.get(updatename)
        get_publisher=request.POST.get(selectpublisher)
        # 以下四句代码都是进行修改数据的代码
        editor_book=Books.objects.get(id=get_id)
        editor_book.bookname=get_name
        editor_book.publisher_id=get_publisher
        editor_book.save()
        return redirect("/app04/allbooks/")

6.3前端editorbooks.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/app04/editor/" method="post">
<input type="text" name="updateid" value=" book.id " style="display: none;"/>
<input type="text" name="updatename" value=" book.bookname "/>

<select name="selectpublisher">
    % for publisher in publishers %
        % if book.publisher_id == publisher.id %
            <option selected value=" publisher.id " > publisher.title </option>
            % else %
            <option value=" publisher.id ">
                 publisher.title 
            </option>
        % endif %
    % endfor %
</select>
<input type="submit" value="更新"/>
</form>
</body>
</html>

 

============================================

总结:

1.一对多关系

class Publisher(models.Model):
    """
    出版社模型类
    """
    id=models.AutoField(primary_key=True)
    title=models.CharField(max_length=20)


class Books(models.Model):
    """
    图书模型类
    """
    id=models.AutoField(primary_key=True) # 表的id,AutoField是自动增长,相当于设置auto_increment
    bookname=models.CharField(max_length=24) # 表的name,CharField是数据库中的varchar,max_length必须设置
    publisher=models.ForeignKey(to="Publisher") # 表的外键,这是一对多关键的所在,to="Publisher"表示关联Publisher模型类的主键

一对多的关系,主要在于设置外键,在该例子中图书是多,出版社是一的关系。

2.增删查改

在该例子中,如果想对图书类进行操作,就相当于对Books类进行操作,具体如下:

查:Books.objects.all() 查询出所有的信息,相当于sql语句:select * from 图书表 

  Books.objects.get(id=1) 查询出id=1的图书信息,相当于sql语句:select * from 图书表 where id=1;

增:Books.objects.create(bookname="高等数学") 添加bookname="高等数学"的图书信息,相当于sql语句:insert into 图书表 (bookname) values (‘高等数学‘);

删:Books.objects.get(id=1).delete() 删除id=1的图书信息,详单与sql语句:delete from 图书表 where id=1

改:editor_book=Books.objects.get(id=1)

  editor_book.bookname="离散数学"

  editor_book.save()

  相当于sql语句:update 图书表set bookname="离散数学" where id=1;

3.request.GET.get(‘id‘,None)  表示获取get方法请求的参数,如果没有获取到,返回None,不会报错

 request.GET[‘id‘]  表示获取get方法请求的参数,如果没有获取到,会程序报错

   同理:request.POSTget("id",None)和request.POST[‘id‘]的方法和上面介绍的方法类似,唯一的区别在于这两个方法是获取POST请求的参数

 

django之url上的include,url命名和反向解析,命名空间以及图书管理系统删除功能二合一方法(代码片段)

include其他的URLconfs#Atanypoint,yoururlpatternscan“include”otherURLconfmodules.This#essentially“roots”asetofURLsbelowotherones.#Forexample,here’sanexcerptoftheURLconffortheDjangowebsiteitself.#Itinclude 查看详情

django第一课基于django图书借阅管理网站平台(代码片段)

概念django服务器开发框架是一款基于Python编程语言用于web服务器开发的框架,采用的是MTV架构模式进行分层架构。项目搭建打开pycharm开发软件,打开开发软件的内置dos窗口操作命令行在这里指定项目存放的磁盘路径,... 查看详情

图书管理系统系列之展示,修改,添加,删除(代码片段)

settings.py配置1.当前app的应用名称添加进去INSTALLED_APPS=[app01,#简写就行]2.MIDDLEWARE中把csrf注释掉,防止post请求发送失败3.DATABASES=‘dafault‘:‘ENGINE‘:‘django.db.backend.mysql‘,‘NAME‘:‘booksys‘,#数据库名称‘HOST‘:‘127.0.0.1‘,#ip‘PORT 查看详情

django框架之模板系统(代码片段)

MVC框架  MVC,全名是ModelViewController,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。MTV架构:  Model(模型):... 查看详情

django框架之视图系统和路由系统(代码片段)

内容回顾:    1.tags      1.for循环         %fornameinname_list%            查看详情

django框架之模板系统2(代码片段)

昨日内容回顾:  1.MVC和MTV框架      MVC         M:model      模型   存写数据   &n 查看详情

django框架之templates(模板)系统(代码片段)

... %%变量相关的用,逻辑相关的用%%。 变量 在Django的模板语言中按此语法使用:变量名。当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身。(可以理解为模板页面中先进行 查看详情

django框架之基础入门(代码片段)

django是一款MVT的框架 一、基本过程  1、创建项目:django-adminstartproject项目名称  2、编写配置文件settings.py(数据库配置、时区、后台管理中英文等)  3、创建应用:pythonmanage.pystartapp应用名称  4、编写模型类:mode... 查看详情

django框架搭建的简易图书信息网站案例(代码片段)

创建Django项目,将数据库改为mysql,修改项目的urls.py文件创建一个新应用,在应用里创建urls.py文件。在应用的models.py里建表?1234567891011121314151617fromdjango.dbimportmodels#Createyourmodelshere.#一类classBookInfo(models.Model): btitle=models 查看详情

django1.11搭建图书管理系统(代码片段)

1.准备工作:1.1项目目录1.2项目setting.py文件修改INSTALLED_APPS=[‘django.contrib.admin‘,‘django.contrib.auth‘,‘django.contrib.contenttypes‘,‘django.contrib.sessions‘,‘django.contrib.messages‘,‘django.contrib.staticfi 查看详情

django框架入门之模型和站点管理(代码片段)

模型当前项目的开发,都是数据驱动的。以下为书籍信息管理的数据关系:书籍和人物是:一对多关系 要先分析出项目中所需要的数据,然后设计数据库表.书籍信息表字段名字段类型字段说明idAutoField主键nameCharField书名idn... 查看详情

在django中使用orm创建图书管理系统(代码片段)

一、ORM(对象关系映射)很多语言的web框架中都有这个概念1、为什么要有ORM?1.写程序离不开数据,要使用数据就需要连接数据库,但是不同的数据库在sql语句上(mysql,oracle等)会有点区别,因此直接在你的项目中使用sql语句的话,不... 查看详情

django框架之介绍与启动(代码片段)

文章目录前言Django概述Django安装Django的部分常用命令Django的部分配置文件介绍Django的运行示例配置内网访问前言因为短学期需要用Django框架来做个NLP的系统用于展示,因此记录一下学习到的相关内容,也是为了到时候需... 查看详情

django图书管理系统3(代码片段)

添加作者的增删改查一、添加数据表在app01文件下边的models文件中添加一个类classAuthor(models.Model):id=models.AutoField(primary_key=True)name=models.CharField(max_length=32)books=models.ManyToManyField(to=‘Book‘)执行  1.pythonmanage.py 查看详情

[django项目实战1]图书管理系统(代码片段)

...架的意义就是直接使用其来进行开发。这里以简单的图书管理系统为例。其中,前端使用的是比较流行的Bootstrap4框架,数据库由于便捷性使用的是云服务的数据库,比较好移植运行本次从前端到后端业务逻辑部分ÿ... 查看详情

django示例之--图书管理操作

示例:实现对图书的添加,删除,修改操作models.py文件内容:from django.db import models# Create your models here.class Book(models.Model):    title=models.CharField(m 查看详情

django框架之中间件(代码片段)

... 一、中间件介绍官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。说的直白... 查看详情

django框架之模型(代码片段)

 ORM简介ORM,全拼Object-RelationMapping,中文意为对象-关系映射,是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据... 查看详情