📅  最后修改于: 2023-12-03 15:30:29.025000             🧑  作者: Mango
Django REST Framework (DRF) 是一个基于 Django 平台的 WebAPI 框架,适用于构建 RESTful API。本文将介绍 DRF 的业务逻辑,包括序列化、视图、路由、认证和权限等。
序列化是将模型数据转换为 JSON 或者 XML 格式,在 DRF 中通常使用序列化器来实现。一个序列化器通常继承 serializers.Serializer
,我们可以通过定义序列化字段对模型数据进行序列化,然后返回序列化的结果。下面是一个示例序列化器:
from rest_framework import serializers
from myapp.models import Book
class BookSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
title = serializers.CharField(max_length=256)
author = serializers.CharField(max_length=256)
description = serializers.CharField()
price = serializers.DecimalField(max_digits=5, decimal_places=2)
def create(self, validated_data):
return Book.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.title = validated_data.get('title', instance.title)
instance.author = validated_data.get('author', instance.author)
instance.description = validated_data.get('description', instance.description)
instance.price = validated_data.get('price', instance.price)
instance.save()
return instance
在上面的序列化器中,我们定义了 id
、title
、author
、description
和 price
等 5 个字段,并实现了create和update方法以支持 Create 和 Update 操作。
在 DRF 中视图是用来处理 HTTP 请求的代码块,我们通常使用类视图来实现。下面是一个示例视图:
from rest_framework import generics
from myapp.models import Book
from myapp.serializers import BookSerializer
class BookListView(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
class BookDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
在上面的视图中,我们定义了 BookListView
类和 BookDetailView
类,分别用于处理书籍列表和书籍详情的请求。在类中我们定义了 queryset
和 serializer_class
属性,用于指定查询数据和使用的序列化器。
在 DRF 中,我们通常使用路由将请求映射到相应的视图处理函数上,DRF 支持多种路由方式,包括基于函数和基于类的视图。下面是一个示例路由:
from django.urls import path
from myapp.views import BookListView, BookDetailView
urlpatterns = [
path('book/', BookListView.as_view()),
path('book/<int:pk>/', BookDetailView.as_view())
]
在上面的路由中,我们定义了两个 URL 路径,分别映射到 BookListView
和 BookDetailView
。在第二个 URL 中 <int:pk>
是一个参数,用于指定要操作的书籍的主键。
DRF 提供了多种认证方式,例如 Basic、Token、JWT 等。下面是一个示例认证:
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView
class BookView(APIView):
authentication_classes = [SessionAuthentication, BasicAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request, format=None):
# ...
在上面的代码中,我们定义一个 BookView
类,并指定了认证方式和权限。通过 authentication_classes
属性和 permission_classes
属性即可。在上面的示例中,我们同时使用了 SessionAuthentication 和 BasicAuthentication 进行认证,并使用 IsAuthenticated 权限要求用户进行身份验证才能访问视图函数。
DRF 提供了多种权限方式,例如 AllowAny、IsAuthenticated、IsAdminUser、DjangoModelPermissions 等。下面是一个示例权限:
from rest_framework.permissions import IsAdminUser
from rest_framework.views import APIView
class BookView(APIView):
permission_classes = [IsAdminUser]
def get(self, request, format=None):
# ...
在上面的代码中,我们定义了一个 BookView
类,并指定了只有管理员用户才有权限访问该 API 接口。
本文介绍了 DRF 的业务逻辑,包括序列化、视图、路由、认证和权限等。通过本文的学习,相信读者已经掌握了 DRF 的核心概念和使用技巧,能够使用 DRF 高效地实现 WebAPI 功能。