栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django入门实战之图书管理系统

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django入门实战之图书管理系统

图书管理系统 1.系统介绍
  • 这个图书管理系统,是针对于刚刚学完模板语法ORM单表操作之后的一个小作业

1.1 系统成品预览:

1.2 系统功能介绍:

  • 1、新增图书 add_book
  • 2、删除图书 delete_book
  • 3、修改图书 change_book
  • 4、查询图书 books

1.3 开发环境:

Python3.6.5
Pycharm2018专业版
Django3.2.3
Bootstrap.css

2.新建项目
  • 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 %}
    
查看书籍
添加书籍 {% for book in book_list %} {% endfor %}
书籍名称 价格 出版时间 出版社 删除操作 编辑操作
{{ book.title }} {{ book.price }} {{ book.pub_date|date:'Y-m-d' }} {{ book.publish }} 删除 编辑
{% endblock %}

changebook.html

{% extends 'base.html' %}

{% block header %}
    
修改书籍
{% csrf_token %}
{% endblock %}

addbook.html

{% extends 'base.html' %}

{% block header %}
    
添加书籍
{% csrf_token %} {# {%csrf_token%}这串内容,它的作用是当我们get表单页面时,服务器返回页面的同时也会向前端返回一串随机字符,#} {# post提交时服务器会验证这串字符来确保用户是在服务端返回的表单页面中提交的数据,防止有人通过例如jquery脚本向某个url不断提交数据,#} {# 是一种数据提交的验证机制。Django的CSRF防御机制。#}
{% endblock %}
  • 全部代码敲完之后,运行图书管理系统,就能看到第一张图那样子啦!感谢预览,阿巴阿巴…

总结:

  • 这个小练习到这里就结束啦!总体还是比较简单的!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357254.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号