使用 Django REST Framework 构建强大的 API
在当今的 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 modelsclass Author(models.Model):name = models.CharField(max_length=100)def __str__(self):return self.nameclass 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, Authorclass AuthorSerializer(serializers.ModelSerializer):class Meta:model = Authorfields = ['id', 'name']class PostSerializer(serializers.ModelSerializer):author = AuthorSerializer()class Meta:model = Postfields = ['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, AuthorSerializerclass AuthorViewSet(viewsets.ModelViewSet):queryset = Author.objects.all()serializer_class = AuthorSerializerclass 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, PostViewSetrouter = 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 IsAdminUserclass 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