📅  最后修改于: 2023-12-03 15:00:27.787000             🧑  作者: Mango
Django Rest Framework 是 Django 的一个扩展插件,它提供了快速构建 RESTful Web APIs 的功能,使开发者只需关注数据的处理和业务逻辑的实现,无需关心请求和响应的处理。
本文就 Django Rest Framework 插件的常见用法和实现方法做详细介绍。
在使用 Django Rest Framework 插件之前,需要先安装该插件。
pip install djangorestframework
安装完成后,在项目的 settings.py 文件中添加以下代码:
INSTALLED_APPS = [
...
'rest_framework',
...
]
Django Rest Framework 插件中最常用的组件是序列化器,它用于将 Python 中的对象序列化成字符流或二进制流,以便于在网络上传输。
比如定义如下的一个人员信息的对象:
class Person:
def __init__(self, name, age, gender, hobbies):
self.name = name
self.age = age
self.gender = gender
self.hobbies = hobbies
我们希望将其序列化成如下的 JSON 格式:
{
"name": "Tom",
"age": 20,
"gender": "male",
"hobbies": ["reading", "music"]
}
可以通过如下的序列化器定义实现:
from rest_framework import serializers
class PersonSerializer(serializers.Serializer):
name = serializers.CharField(required=True, max_length=100)
age = serializers.IntegerField(required=True)
gender = serializers.ChoiceField(required=True, choices=["male", "female"])
hobbies = serializers.ListField(child=serializers.CharField())
在视图中可以通过如下方式使用序列化器:
class PersonView(APIView):
def get(self, request):
person = Person(name="Tom", age=20, gender="male", hobbies=["reading", "music"])
serialized_person = PersonSerializer(instance=person)
return Response(serialized_person.data)
视图集是 Django Rest Framework 插件中另一个重要的组件,它用于定义 CRUD 操作的视图函数。
比如定义如下的一个人员信息的模型:
class Person(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
gender = models.CharField(max_length=10)
hobbies = models.TextField()
def __str__(self):
return self.name
可以定义如下的视图集:
from rest_framework import viewsets
from rest_framework.response import Response
class PersonViewSet(viewsets.ModelViewSet):
queryset = Person.objects.all()
serializer_class = PersonSerializer
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
data = {
"person": serializer.data,
"message": "retrieved successfully"
}
return Response(data)
在 Django Rest Framework 插件中,路由配置不同于 Django 原生的 URLconf,它支持将视图和视图集进行绑定,并提供了如下的路由类:
配置路由的方式如下:
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register(r'persons', PersonViewSet)
urlpatterns = router.urls
Django Rest Framework 插件提供了一系列的验证器,用于对请求参数做校验。
比如需要校验请求中传入的 name 字段是否符合要求,可以通过定义如下的验证器实现:
class NameValidator:
def __call__(self, value):
if len(value) < 5:
raise serializers.ValidationError('Name is too short')
return value
然后在序列化器的 name 字段中使用该验证器:
name = serializers.CharField(validators=[NameValidator()])
Django Rest Framework 插件极大地简化了 RESTful Web APIs 的开发过程,提高了开发效率和代码可读性,是 Django 开发者不可或缺的一个扩展。