Django软删除功能完整指南:构建图书馆项目

2025-04-08T11:53:54+08:00 | 3分钟阅读 | 更新于 2025-04-08T11:53:54+08:00

Macro Zhao

Django软删除功能完整指南:构建图书馆项目

推荐超级课程:

@TOC

在本教程中,我将使用 django-safedelete 包创建一个具有软删除功能的简单 Django 图书馆项目。该项目将包括多个模型、Django REST 框架 (DRF) API 和基本的 CRUD 操作。

Django-safedelete 功能,允许您将对象标记为已删除,而实际上并未从数据库中移除它们

第 1 步:安装所需包

pip install django djangorestframework django-safedelete

安装 Django、Django REST 框架和 django-safedelete 以添加软删除功能。

第 2 步:设置您的 Django 项目

django-admin startproject library_project
cd library_project

此命令初始化一个名为 library_project 的新 Django 项目。

第 3 步:创建一个 Django 应用程序

python manage.py startapp library

生成一个新的 Django 应用程序 library 来组织您的项目组件。

第 4 步:更新 library_project/settings.py 中的 INSTALLED_APPS

INSTALLED_APPS = [
    # ...
    'rest_framework',
    'safedelete',
    'library',
]

'rest_framework''safedelete' 和您的 'library' 应用程序添加到 INSTALLED_APPS 列表中。

第 5 步:在 library/models.py 中定义模型

创建两个具有软删除功能的模型 AuthorBook

# library/models.py
from django.db import models
from safedelete.models import SafeDeleteModel, SOFT_DELETE_CASCADE
class Author(SafeDeleteModel):
    _safedelete_policy = SOFT_DELETE_CASCADE
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name
class Book(SafeDeleteModel):
    _safedelete_policy = SOFT_DELETE_CASCADE
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    def __str__(self):
        return self.title

实现 AuthorBook 模型,两者都继承自 SafeDeleteModel 并具有软删除策略。

第 6 步:在 library/admin.py 中注册模型

# library/admin.py
from django.contrib import admin
from .models import Author, Book
admin.site.register(Author)
admin.site.register(Book)

在 Django 管理界面中注册 AuthorBook 模型。

第 7 步:进行迁移并应用更改

python manage.py makemigrations
python manage.py migrate

运行迁移以将更改应用到数据库模式。

第 8 步:创建超级用户

python manage.py createsuperuser

生成一个超级用户以访问 Django 管理界面。

第 9 步:在 library/serializers.py 中创建序列化器

# library/serializers.py
from rest_framework import serializers
from .models import Author, Book
class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = '__all__'
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

AuthorBook 模型构建序列化器。

第 10 步:在 library/views.py 中创建视图

# library/views.py
from rest_framework import generics
from .models import Author, Book
from .serializers import AuthorSerializer, BookSerializer
class AuthorListCreateView(generics.ListCreateAPIView):
    queryset = Author.objects.all()
    serializer_class = AuthorSerializer
class BookListCreateView(generics.ListCreateAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

开发用于列出和创建 AuthorBook 对象的视图。

第 11 步:更新 library/urls.py

# library/urls.py
from django.urls import path
from .views import AuthorListCreateView, BookListCreateView
urlpatterns = [
    path('authors/', AuthorListCreateView.as_view(), name='author-list-create'),
    path('books/', BookListCreateView.as_view(), name='book-list-create'),
]

AuthorBook 视图定义 URL 模式。

第 12 步:更新 library_project/urls.py

# library_project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('library.urls')),
]

在项目的 urls.py 文件中包含应用程序的 URL。

第 13 步:运行开发服务器

python manage.py runserver

启动开发服务器以测试您的项目。 访问 http://127.0.0.1:8000/admin/ 添加作者和书籍。 您还可以使用 django fixtures 添加虚拟数据

# authors.json
[
  {
    "model": "library.author",
    "pk": 1,
    "fields": {
      "name": "John Doe"
    }
  },
  {
    "model": "library.author",
    "pk": 2,
    "fields": {
      "name": "Jane Smith"
    }
  },
  {
    "model": "library.author",
    "pk": 3,
    "fields": {
      "name": "Michael Johnson"
    }
  },
  {
    "model": "library.author",
    "pk": 4,
    "fields": {
      "name": "Emily Brown"
    }
  },
  {
    "model": "library.author",
    "pk": 5,
    "fields": {
      "name": "David Wilson"
    }
  },
  {
    "model": "library.author",
    "pk": 6,
    "fields": {
      "name": "Sarah Miller"
    }
  },
  {
    "model": "library.author",
    "pk": 7,
    "fields": {
      "name": "James Davis"
    }
  },
  {
    "model": "library.author",
    "pk": 8,
    "fields": {
      "name": "Anna Martinez"
    }
  },
  {
    "model": "library.author",
    "pk": 9,
    "fields": {
      "name": "Daniel Taylor"
    }
  },
  {
    "model": "library.author",
    "pk": 10,
    "fields": {
      "name": "Olivia Garcia"
    }
  }
]
# books.json

[
  {
    "model": "library.book",
    "pk": 1,
    "fields": {
      "title": "Python Programming",
      "author": 1
    }
  },
  {
    "model": "library.book",
    "pk": 2,
    "fields": {
      "title": "Django Web Development",
      "author": 2
    }
  },
  {
    "model": "library.book",
    "pk": 3,
    "fields": {
      "title": "JavaScript Basics",
      "author": 3
    }
  },
  {
    "model": "library.book",
    "pk": 4,
    "fields": {
      "title": "Data Science Fundamentals",
      "author": 4
    }
  },
  {
    "model": "library.book",
    "pk": 5,
    "fields": {
      "title": "Algorithms and Data Structures",
      "author": 5
    }
  },
  {
    "model": "library.book",
    "pk": 6,
    "fields": {
      "title": "Artificial Intelligence: A Modern Approach",
      "author": 6
    }
  },
  {
    "model": "library.book",
    "pk": 7,
    "fields": {
      "title": "Machine Learning Yearning",
      "author": 7
    }
  },
  {
    "model": "library.book",
    "pk": 8,
    "fields": {
      "title": "The Design of Everyday Things",
      "author": 8
    }
  },
  {
    "model": "library.book",
    "pk": 9,
    "fields": {
      "title": "Clean Code",
      "author": 9
    }
  },
  {
    "model": "library.book",
    "pk": 10,
    "fields": {
      "title": "Web Scraping with Python",
      "author": 10
    }
  }
]

确保将这些 fixture 放在 Django 项目的 library 应用程序中,通常在名为 fixtures 的文件夹中。然后,您可以使用 loaddata 管理命令加载这些 fixture。例如:

python manage.py loaddata authors.json
python manage.py loaddata books.json

这将使用提供的数据填充您的数据库。根据您的项目需求调整数据!

检查 http://127.0.0.1:8000/api/authors/http://127.0.0.1:8000/api/books/ 上的 API 端点。

您已成功使用 django-safedelete 创建了一个具有软删除功能的 Django 图书馆项目。根据您的项目需求,通过添加更多功能并增强现有功能来扩展此项目。

您可以从 CSDN 下载此项目完整源码

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee