Django实现图书馆管理系统
创始人
2025-06-01 01:42:31

1.创建项目library和应用程序

django-admin startproject library
cd library
python manage.py startapp books

2.创建模型
在 library/books/models.py 文件中创建模型

from django.db import modelsclass Book(models.Model):book_id = models.IntegerField(primary_key=True)name = models.CharField(max_length=100)author = models.CharField(max_length=100)publisher = models.CharField(max_length=100)publish_time = models.DateField()price = models.DecimalField(max_digits=8, decimal_places=2)create_time = models.DateTimeField(auto_now_add=True)update_time = models.DateTimeField(auto_now=True)def __str__(self):return self.name

3.迁移数据库
在终端中运行以下命令,将模型迁移到数据库中:
python3 manage.py migrate # 创建表结构
python3 manage.py makemigrations books # 让 Django 知道我们在我们的模型有一些变更
python3 manage.py migrate books # 创建表结构
修改settings.py

DATABASES = {'default':{'ENGINE': 'django.db.backends.mysql',  # 数据库引擎'NAME': 'xxx',  # 数据库名称'HOST': '127.0.0.1',  # 数据库地址,本机 ip 地址 127.0.0.1'PORT': 3306,  # 端口'USER': 'root',  # 数据库用户名'PASSWORD': 'xxxx',  # 数据库密码}
}INSTALLED_APPS = ['books','django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]

4.创建表单
library/books/book_form.py
Django提供了两种自定义表单的方式:继承Form类和ModelForm类。前者你需要自定义表单中的字段,后者可以根据Django模型自动生成表单,如下所示:

from django import forms
from .models import Bookclass BookForm(forms.ModelForm):class Meta:model = Bookfields = ['name', 'author', 'publisher', 'publish_time', 'price', 'book_id']labels = {'name': '书名','author': '作者','publisher': '出版社','publish_time': '出版时间','price': '价格','book_id': '标识图书的唯一id'}widgets = {'publish_time': forms.DateInput(attrs={'type': 'date'})}

创建一个名为 BookForm 的 Django 表单类,它继承自 forms.ModelForm,用于创建和更新 Book 模型实例的表单。这个表单包含了模型中的各个字段,使用中文标签进行显示,并将 publish_time 字段的小部件渲染成日期选择器。
Meta 内部的各个属性设置如下:
model = Book 表示这个表单将与 Book 模型类相关联,用于创建和更新 Book 模型实例的表单。
fields = […] 定义了表单中需要显示的字段。在这个例子中,这些字段包括 name,author,publisher,publish_time,price 和 book_id。
labels = {…} 定义了表单中各个字段的标签,用于在表单中显示。这里将每个字段的标签名都指定为中文。
widgets = {…} 定义了表单中各个字段的小部件,用于在表单中显示。这里使用 forms.DateInput 来定义 publish_time 字段的小部件,将它渲染为 HTML5 中的日期选择器。
5.创建视图
在 library/books/views.py 文件中创建视图

from django.shortcuts import render, redirect
from .models import Book
from .book_form import BookFormdef book_list(request):books = Book.objects.all()return render(request, 'books/book_list.html', {'books': books})def book_detail(request, pk):book = Book.objects.get(pk=pk)return render(request, 'books/book_detail.html', {'book': book})def book_create(request):form = BookForm(request.POST or None)if form.is_valid():form.save()return redirect('book_list')return render(request, 'books/book_form.html', {'form': form})def book_update(request, pk):book = Book.objects.get(pk=pk)form = BookForm(request.POST or None, instance=book)if form.is_valid():form.save()return redirect('book_list')return render(request, 'books/book_form.html', {'form': form})def book_delete(request, pk):book = Book.objects.get(pk=pk)if request.method == 'POST':book.delete()return redirect('book_list')return render(request, 'books/book_delete.html', {'book': book})

6.创建 URL
在 library/library/urls.py 文件中创建 URL

from django.urls import path
import os
import sysfather_path = os.path.abspath(os.path.join(os.getcwd(), "..", "books"))
sys.path.append(father_path)
from books import views as lib_viewsurlpatterns = [# path('', views.index, name='index'),# path('signup/', views.signup, name='signup'),# path('login/', views.login, name='login'),# path('logout/', views.logout, name='logout'),path('books/', lib_views.book_list, name='book_list'),path('books/add/', lib_views.book_create, name='book_create'),path('books//', lib_views.book_detail, name='book_detail'),path('books//update/', lib_views.book_update, name='book_update'),path('books//delete/', lib_views.book_delete, name='book_delete'),
]

7.创建模板
在 templates/books/book_list.html 文件中创建模板
base.html



Library Management System

{% block content %}{% endblock %}

book_delete.html

{% extends 'books/base.html' %}{% block content %}

Confirm Delete

Are you sure you want to delete "{{ book.name }}"?

{% csrf_token %}Cancel
{% endblock %}

book_detail.html

{% extends 'books/base.html' %}{% block content %}

Book Detail

{{ book.name }}

Author: {{ book.author }}

Price: {{ book.price }}

Back to List {% endblock %}

book_form.html

{% extends 'books/base.html' %}{% block content %}

Add Book

{% csrf_token %}{{ form.as_p }}
{% endblock %}

book_list.html

{% extends 'books/base.html' %}{% block content %}

Book List

Add Book {% for book in books %}{% endfor %}
TitleAuthorPriceActions
{{ book.name }}{{ book.author }}{{ book.price }}ViewEditDelete
{% endblock %}
View 

这行代码是一个 HTML 的链接元素,使用了 Django 模板语言的 URL 反解析功能。具体解释如下:

 是 HTML 中的链接标签。
href 是链接的属性,它告诉浏览器要打开的页面地址。
{% url 'book_detail' book.pk %} 是 Django 模板语言的 URL 反解析语法。它会根据传递进来的 book 对象的主键 pk,解析出对应的 URL 地址。book_detail 是该 URL 地址对应的视图函数的名称,可以在 urls.py 文件中找到它的定义。这样做可以保证代码的可维护性和可扩展性。
View 是链接的文本内容,用户点击链接后会跳转到该链接地址。
因此,这行代码的作用是生成一个链接,指向 book_detail 视图函数对应的页面,并显示文本内容为 View

8.运行服务器
在终端中运行以下命令,启动服务器

python manager.py runserver 0.0.0.0:8000

在浏览器输入 127.0.0.0:8000就可以访问了

相关内容

热门资讯

山东人的过冬美食图鉴,你好哪一... 当朔风掠过泰山的层峦,霜雪轻吻黄河的岸线,齐鲁大地便浸在清冽又温热的冬日氛围里。 山东人的冬天,从不...
游客在昆明滇池索道拍摄到管道排... 新京报记者 贺俊怡 制作 高晨曦 12月16日,有游客在昆明滇池观光索道上拍摄到两根管道正向湖中排放...
南阳旅游景点排名前十名 南阳,这座历史文化名城,自然风光与人文景观交相辉映,吸引着众多游客前来探寻。以下为大家揭晓南阳旅游景...
元旦假期前夜火车票今天开抢,热... 2025年的进度条即将加载完毕,元旦假期前夜火车票今天开抢,“请3休8”元旦出境游机票预订火热。 根...
瞄准多代同堂及银发族多元需求,... 在庆祝进入大中华区市场50周年之际,洲际酒店集团旗下假日酒店品牌于近日发布《大中华区五十周年纪念册》...