《每天5分钟教你用Django构建一个管理系统》第二篇:实现书本的增删改查
引言
在本系列教程的第二篇中,我们将着手开发书店管理系统中书本的增删改查(CRUD)功能。这包括创建书本信息模型,实现相应的Django视图,并设计简洁的用户界面。
环境准备
确保你已经按照上一篇教程设置好了Django项目和应用。
定义书本模型
在models.py中定义包含书名、作者、出版社、价格、出版时间和编号的书本模型。
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200) # 书名
author = models.CharField(max_length=100) # 作者
publisher = models.CharField(max_length=100) # 出版社
price = models.DecimalField(max_digits=6, decimal_places=2) # 价格
publication_date = models.DateField() # 出版时间
book_id = models.CharField(max_length=20) # 编号
def __str__(self):
return self.title
数据库迁移
生成并应用迁移来更新数据库。
python manage.py makemigrations
python manage.py migrate
创建管理员界面
在admin.py中注册模型,以便在Django后台管理书本。
from django.contrib import admin
from .models import Book
admin.site.register(Book)
实现CRUD功能
在views.py中创建视图处理书本的CRUD操作。
from django.shortcuts import render, redirect, get_object_or_404
from .models import Book
from .forms import BookForm
# 书本列表视图
def book_list(request):
books = Book.objects.all()
return render(request, 'books/book_list.html', {'books': books})
# 书本创建视图
def book_create(request):
if request.method == 'POST':
form = BookForm(request.POST)
if form.is_valid():
form.save()
return redirect('book_list')
else:
form = BookForm()
return render(request, 'books/book_form.html', {'form': form})
# 书本更新视图
def book_update(request, pk):
book = get_object_or_404(Book, pk=pk)
if request.method == 'POST':
form = BookForm(request.POST, instance=book)
if form.is_valid():
form.save()
return redirect('book_list')
else:
form = BookForm(instance=book)
return render(request, 'books/book_form.html', {'form': form})
# 书本删除视图
def book_delete(request, pk):
book = get_object_or_404(Book, pk=pk)
if request.method == 'POST':
book.delete()
return redirect('book_list')
return render(request, 'books/book_confirm_delete.html', {'object': book})
创建表单
在forms.py中创建书本表单。
from django import forms
from .models import Book
class BookForm(forms.ModelForm):
class Meta:
model = Book
fields = ['title', 'author', 'publisher', 'price', 'publication_date', 'book_id']
配置URLs
配置CRUD的URL路由。
from django.urls import path
from . import views
urlpatterns = [
path('books/', views.book_list, name='book_list'),
path('books/create/', views.book_create, name='book_create'),
path('books/update/<int:pk>/', views.book_update, name='book_update'),
path('books/delete/<int:pk>/', views.book_delete, name='book_delete'),
]
创建模板
创建模板目录结构
在books应用下创建templates/books目录。
books/
│
├── templates/
│ └── books/
│ ├── book_list.html
│ ├── book_form.html
│ └── book_confirm_delete.html
│
└── ...
配置模板目录
在settings.py中设置TEMPLATES配置。
TEMPLATES = [
{
# ...
'DIRS': [os.path.join(BASE_DIR, 'books/templates')],
# ...
},
]
创建书本列表模板
在book_list.html中,创建书本列表。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Book List</title>
</head>
<body>
<h1>Book List</h1>
<a href="{% url 'book_create' %}">Add New Book</a>
<ul>
{% for book in books %}
<li>
{{ book.title }} by {{ book.author }} ({{ book.publisher }})
- ${{ book.price }} ({{ book.publication_date }})
<a href="{% url 'book_update' book.pk %}">Edit</a>
<a href="{% url 'book_delete' book.pk %}">Delete</a>
</li>
{% empty %}
<li>No books available.</li>
{% endfor %}
</ul>
</body>
</html>
创建书本表单模板
在book_form.html中,创建书本创建和更新表单。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% if form.instance.pk %}Edit Book{% else %}Add Book{% endif %}</title>
</head>
<body>
<h1>{% if form.instance.pk %}Edit{% else %}Add{% endif %} Book</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">{% if form.instance.pk %}Save Changes{% else %}Add Book{% endif %}</button>
</form>
</body>
</html>
创建书本删除确认模板
在book_confirm_delete.html中,创建书本删除确认页面。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Delete Book</title>
</head>
<body>
<h1>Delete Book</h1>
<p>Are you sure you want to delete "{{ object.title }}" by {{ object.author }}?</p>
<form method="post">
{% csrf_token %}
<button type="submit">Confirm</button>
<a href="{% url 'book_list' %}">Cancel</a>
</form>
</body>
</html>
样式和布局
为模板添加CSS样式。
测试模板
确保模板正确渲染。
结语
通过今天的学习,你已经实现了书本的CRUD操作,为书店管理系统提供了基础功能。在接下来的教程中,我们将继续添加更多功能。
进阶资源
- Django模型文档:https://docs.djangoproject.com/en/3.2/topics/db/models/
- Django表单文档:https://docs.djangoproject.com/en/3.2/topics/forms/
如果你有任何问题或需要进一步的帮助,请随时联系我们。继续关注明天的教程,我们将深入更多高级功能。
Django书本CRUD
740

被折叠的 条评论
为什么被折叠?



