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
中定义模型
创建两个具有软删除功能的模型 Author
和 Book
。
# 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
实现 Author
和 Book
模型,两者都继承自 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 管理界面中注册 Author
和 Book
模型。
第 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__'
为 Author
和 Book
模型构建序列化器。
第 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
开发用于列出和创建 Author
和 Book
对象的视图。
第 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'),
]
为 Author
和 Book
视图定义 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 下载此项目完整源码