使用 Django REST 框架在 Django 中创建 RESTful API

Django REST Framework (DRF) 是一个功能强大且灵活的工具包,用于构建 Web API。它简化了创建 RESTful API 的过程,提供了序列化程序、视图集和开箱即用的身份验证机制等功能。

设置Django REST框架

在创建 RESTful API 之前,您需要安装 Django REST Framework 并将其添加到您的项目中。运行以下命令安装 DRF:

pip install djangorestframework

然后,将 'rest_framework' 添加到 settings.py 文件中的 INSTALLED_APPS 中:

INSTALLED_APPS = [
    ...,
    'rest_framework',
]

创建一个简单的 API

让我们为一个名为 *h5Bookh6* 的简单模型创建一个 API。第一步是在 *h5models.pyh6* 中定义模型:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)
    published_date = models.DateField()
    isbn = models.CharField(max_length=13)

    def __str__(self):
        return self.title

定义模型后,运行迁移来创建数据库表:

python manage.py makemigrations
python manage.py migrate

创建序列化器

DRF 中的序列化器将复杂数据类型(如 Django 模型)转换为 JSON。为 Book 模型创建一个序列化器:

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

构建视图和 URL

DRF 提供了两种创建 API 视图的主要方法:基于函数的视图和基于类的视图。在这里,我们使用基于类的视图和 APIView

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .serializers import BookSerializer

class BookListCreateAPIView(APIView):
    def get(self, request):
        books = Book.objects.all()
        serializer = BookSerializer(books, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer = BookSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

接下来,在 urls.py 中配置此视图的 URL:

from django.urls import path
from .views import BookListCreateAPIView

urlpatterns = [
    path('books/', BookListCreateAPIView.as_view(), name='book-list-create'),
]

测试 API

在服务器运行时,您可以使用 Postman 或 curl 等工具测试 http://127.0.0.1:8000/books/ 上的 API。GET 请求会检索所有书籍,POST 请求允许您创建新书籍。

使用 ViewSet 增强 API

为了获得更简洁、可重用的代码,您可以使用 DRF 的 ViewSetRouter。以下是如何更新 API 以使用 ModelViewSet

from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializer

class BookViewSet(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

然后,在 h5urls.py h6 中配置路由器:

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet, basename='book')

urlpatterns = router.urls

结论

Django REST Framework 可让您轻松创建强大而灵活的 RESTful API。通过使用序列化程序、视图和路由器,您可以轻松构建处理复杂数据模型的 API。有了这个基础,您现在可以探索 DRF 中的自定义权限、分页和身份验证等高级功能。