《每天5分钟教你用Django构建一个管理系统》第二篇:实现书本的增删改查

Django书本CRUD

《每天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操作,为书店管理系统提供了基础功能。在接下来的教程中,我们将继续添加更多功能。

进阶资源

如果你有任何问题或需要进一步的帮助,请随时联系我们。继续关注明天的教程,我们将深入更多高级功能。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值