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

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就可以访问了

相关内容

热门资讯

原创 刷... 端午撞上六一的初夏,阳光把日子酿得滚烫,而武安的山水里藏着能让时光慢下来的魔法——刷到这条推送的你,...
详细攻略:从长沙出发自驾游黄山... 自驾游无疑是探索中国美丽风景的一种绝佳方式,而黄山,作为中国最著名的山脉之一,以其雄伟的山势、奇特的...
西北青甘大环线必玩景点,甘南省... 当辽阔的戈壁在窗外铺展,当圣洁的雪山在云端闪耀,当五彩的经幡在风中翻飞,我知道,我的灵魂正在被西北的...
端午节不止安康,还有法门文化景... 端午小长假第三天,法门文化景区气候宜人,游览体验度满分。景区各岗位员工坚守岗位,不辞辛劳,不仅传递节...
原创 生... 标题:生煎包,馅料的秘密,皮薄馅大有汤汁,一口下去汤汁儿直流! 在这个快节奏的时代,美食不仅仅是味...
“粤”上新台阶丨水果千千万 广... 谁都知道荔枝是“岭南佳果”。但在广东,如果你还只是把荔枝当成一种普通水果,那可就大大低估了广东人对它...
原创 我... 我家做芹菜炒蘑菇这菜,从来不放肉,一把芹菜,再配上些鲜蘑菇,清清淡淡但又营养满满,而且特别下饭。炒这...
吕文扬与元诚的新疆游记:天山徒... 飞机降落在乌鲁木齐地窝堡国际机场时,吕文扬透过舷窗看到了远处连绵的雪山轮廓。他拍了拍身旁正在打瞌睡的...
四川6天旅游路线推荐:四川报团... 四川6天旅游路线推荐:四川报团旅游6天费用,超实用干货分享!超棒攻略 四川之旅,一场味蕾与心灵的盛宴...
海口火山荔枝王采摘攻略来了!3... 🌞🌞🌞 湛蓝湛蓝的天空 大朵大朵的云彩 海口的夏天 空气里满是荔枝香甜~ 黝黑火山石上孕育的海口火...
假期余额不足,这些地方依然有惊... 传统 过端午,迎世运,游公园城市 “五月五,是端阳,门插艾,香满堂。”当端午的艾香浸润天府新区的街巷...
和朋友去张家界5日旅游跟团报价... 最近刚计划了一次张家界的五天四晚旅行,想着既能放松心情又能看看大自然的鬼斧神工。张家界旅游五天四晚旅...
机票价格“跳水” 突现1.1折... 近期,机票价格处于“跳水季”。记者在多家在线旅游平台上看到,目前从杭州萧山国际机场出发前往三亚、成都...
梧州潘塘公园荷花开,市民赏景度... 6月1日,游人在梧州市万秀区潘塘公园,赏荷游玩,乐享假日。 游人在梧州市万秀区潘塘公园,赏荷游玩,...
官方消息:2025年全国三支一... 最新消息 2025年全国三支一扶招募34430人! 消息全文如下: 各省、自治区、直辖市及新疆生产建...
印度游客摸老虎自拍遭袭击,攻击... 记者 | 何博奇 △视频截图 泰国普吉岛知名观光景点“老虎王国”近日发生一起惊险事件。一名印度游客...