使用 Django REST Framework 构建强大的 API

发布于:2025-07-30 ⋅ 阅读:(15) ⋅ 点赞:(0)

在当今的 Web 开发中,构建 RESTful API 已经成为连接前后端不可或缺的一环。Django REST Framework(DRF)是一个强大而灵活的工具包,用于构建 Web APIs。它基于 Django 框架之上,提供了简单且可扩展的方式,让开发者能够快速地创建出功能丰富的 API。

本文将带你从零开始,使用 Django REST Framework 创建一个简单的博客应用 API,涵盖模型设计、序列化器、视图集、路由配置以及权限管理等内容。


一、安装与配置 Django REST Framework

首先确保你已经安装了 Django 并创建了一个项目。接下来我们来安装 DRF:

pip install djangorestframework

然后,在你的 settings.py 文件中的 INSTALLED_APPS 列表里添加 'rest_framework'

INSTALLED_APPS = [
    ...
    'rest_framework',
]

二、创建博客应用

假设你已经有了一个名为 blog 的应用,我们将在此基础上构建我们的 API。

1. 定义模型

models.py 中定义文章和作者的模型:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    published_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

运行迁移命令以创建数据库表:

python manage.py makemigrations
python manage.py migrate

三、序列化数据

为了将 Django 模型转换为 JSON 格式,我们需要使用 DRF 提供的序列化器。

1. 创建序列化器

blog 应用下新建一个 serializers.py 文件,并定义如下内容:

from rest_framework import serializers
from .models import Post, Author

class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = ['id', 'name']


class PostSerializer(serializers.ModelSerializer):
    author = AuthorSerializer()

    class Meta:
        model = Post
        fields = ['id', 'title', 'content', 'author', 'published_date']

这里我们定义了两个序列化器:一个是针对 Author 模型的 AuthorSerializer,另一个是针对 Post 模型的 PostSerializer,其中包含了对 Author 的嵌套序列化。


四、编写视图

DRF 提供了两种主要的方式来定义视图:基于函数的视图和基于类的视图。在这里,我们将使用视图集(ViewSets),这是一种更加简洁和强大的方式。

1. 创建视图集

views.py 中添加以下代码:

from rest_framework import viewsets
from .models import Post, Author
from .serializers import PostSerializer, AuthorSerializer

class AuthorViewSet(viewsets.ModelViewSet):
    queryset = Author.objects.all()
    serializer_class = AuthorSerializer


class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

五、配置 URL 路由

为了让 API 可访问,我们需要设置相应的路由。

urls.py 中进行如下修改:

from django.urls import include, path
from rest_framework.routers import DefaultRouter
from blog.views import AuthorViewSet, PostViewSet

router = DefaultRouter()
router.register(r'authors', AuthorViewSet)
router.register(r'posts', PostViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

这样我们就设置了两个基本的路由 /authors//posts/,分别对应作者和文章的操作。


六、测试 API

启动 Django 开发服务器:

python manage.py runserver

现在你可以通过浏览器或 POSTMAN 等工具访问 API 接口了。例如:

  • 获取所有文章列表:GET http://localhost:8000/posts/
  • 创建新文章:POST http://localhost:8000/posts/
  • 更新一篇文章:PUT http://localhost:8000/posts/{id}/
  • 删除一篇文章:DELETE http://localhost:8000/posts/{id}/

七、添加认证和权限

对于大多数 API 来说,控制谁可以访问特定资源是非常重要的。DRF 提供了多种认证方式和权限策略。

1. 配置全局认证

settings.py 中添加:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

这将启用基本的身份验证和会话身份验证,并要求所有用户必须已登录才能访问 API。

2. 自定义权限

如果你想对不同的视图设置不同的权限,可以在对应的视图集中指定 permission_classes 属性。

from rest_framework.permissions import IsAdminUser

class PostViewSet(viewsets.ModelViewSet):
    ...
    permission_classes = [IsAdminUser]  # 只有管理员可以编辑帖子

八、总结

通过本教程,你应该已经学会了如何使用 Django REST Framework 快速搭建一个 RESTful API。我们覆盖了从环境准备、模型定义、序列化器编写、视图集实现到路由配置的基础知识,并介绍了如何添加认证和权限保护。

当然,DRF 还有许多高级特性等待你去探索,如分页、过滤、自定义动作等。希望这篇文章能帮助你在开发过程中更好地理解和运用这些概念。


参考资料

Home - Django REST framework

Quickstart - Django REST framework

Viewsets - Django REST framework

Authentication - Django REST framework


网站公告

今日签到

点亮在社区的每一天
去签到