Code前端首页关于Code前端联系我们

Django REST Framework (DRF) 初学者教程

terry 2年前 (2023-09-24) 阅读数 59 #后端开发

Django REST Framework (DRF) 是一个基于 Django 框架的强大的 Web API 框架,提供了用于构建 RESTful API 的各种工具。它为我们提供了许多开箱即用的功能,例如序列化、验证、文档、渲染和视图,使我们能够快速创建强大的 Web API。

以下是DRF的基本用法:

  1. 安装DRF。可以使用 pip 命令安装:pip install djangorestframework。
  2. 将DRF应用程序添加到Django项目的settings.py文件中:
INSTALLED_APPS = [
    # ...
    'rest_framework',
]
  1. 写入序列化。序列化器用于将 Django 模型转换为 JSON 或其他格式并执行数据验证。例如,我们可以定义一个序列化器来序列化用户模型:
from rest_framework import serializers
from myapp.models import User

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password')

在上面的示例中,我们使用DRF的serializers.ModelSerializer类来定义一个名为UserSerializer的序列化器。我们通过 field 参数指定要序列化的字段。

  1. 编写视图函数。视图函数用于处理 HTTP 请求并返回响应。您可以使用 DRF 视图来处理请求和响应。
from rest_framework import generics
from myapp.models import User
from myapp.serializers import UserSerializer

class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

在上面的示例中,我们使用DRF的generics.ListCreateAPIView类定义一个名为UserList的视图函数来处理GET和POST请求。我们使用 queryset 参数指定要从数据库检索的用户数据,并使用 serializer_class 参数指定要使用的序列化器。

  1. 指定 URL。我们需要将视图操作映射到 URL,可以使用 Django 的 urls.py 文件指定该 URL。
from django.urls import path
from myapp.views import UserList

urlpatterns = [
    path('users/', UserList.as_view()),
]

在上面的示例中,我们使用路径函数将 /users/ URL 映射到 UserList 视图函数。

以上就是DRF的基本用法。除此之外,DRF还提供了许多其他功能和工具,例如身份验证、分页、过滤、搜索、排序、视图、路由、视图装饰等,可以根据需要使用和配置。

以下是一些常用功能的介绍:

  1. Authentication

DRF提供了多种认证方式,包括BasicAuthentication、SessionAuthentication、TokenAuthentication等,可以通过查看认证方式来设置该属性。 。

from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import IsAuthenticated

class UserList(generics.ListCreateAPIView):
    authentication_classes = [SessionAuthentication]
    permission_classes = [IsAuthenticated]
    # ...

在上面的示例中,我们使用 SessionAuthentication 方法和 IsAuthenticated 权限来限制仅对经过身份验证的用户进行访问。

  1. Pagination

DRF 提供了多种分页方法,如 PageNumberPagination、LimitOffsetPagination、CursorPagination 等。您可以使用分页类属性在视图中指定分页方法。

from rest_framework.pagination import PageNumberPagination

class UserList(generics.ListCreateAPIView):
    pagination_class = PageNumberPagination
    # ...

在上面的例子中,我们使用PageNumberPagination分页方法。

  1. 过滤、搜索、排序

DRF 提供了可以使用查询字符串参数指定的各种过滤、搜索和排序方法。您可以使用视图上的filter_backends 属性来指定要使用的过滤、搜索和排序方法。

from rest_framework.filters import SearchFilter, OrderingFilter

class UserList(generics.ListCreateAPIView):
    filter_backends = [SearchFilter, OrderingFilter]
    search_fields = ['username', 'email']
    ordering_fields = ['username', 'email']
    # ...

在上面的例子中,我们使用SearchFilter进行搜索,使用OrderingFilter进行排序。同时,我们还使用search fields和ordering_fields属性来定义要搜索和排序的字段。

  1. Viewsets

DRF 提供了各种视图集,包括 ModelViewSet、ReadOnlyModelViewSet、ViewSet 等。您可以使用视图集来组织和管理视图操作。

from rest_framework import viewsets
from myapp.models import User
from myapp.serializers import UserSerializer

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

在上面的示例中,我们使用 ModelViewSet 视图集来定义一个名为 UserViewSet 的视图,该视图包含多种用于处理 HTTP 请求的方法,例如 GET、POST、PUT、DELETE 等。

  1. 路由

DRF提供了多种路由方式,包括SimpleRouter、DefaultRouter、NestedSimpleRouter、NestedDefaultRouter等,您可以使用路由来组织和管理URL。

from django.urls import include, path
from rest_framework.routers import SimpleRouter
from myapp.views import UserViewSet

router = SimpleRouter()
router.register(r'users', UserViewSet)

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

在上面的例子中,我们使用SimpleRouter路由定义了一个名为router的路由,然后使用router.register()方法向该路由注册一个UserViewSet。最后,我们使用 include() 函数将路由连接到 Django URLConf。

  1. Serialisers

DRF 的序列化器是一个用于将 Django 模型转换为 JSON、XML、YAML 等格式的工具。序列化器还提供反序列化函数,可以将 JSON、XML、YAML 等格式的数据转换为 Django 模型。

from rest_framework import serializers
from myapp.models import User

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

在上面的示例中,我们定义了一个名为 UserSerializer 的序列化器,它将用户模型转换为 JSON。通过将 fields 属性设置为 __all__,我们将 User 模型的所有字段包含在序列化结果中。

  1. 异常处理

DRF 提供了多种异常处理方法。您可以使用Exception_handler属性在视图中自定义异常处理方法。

from rest_framework.views import exception_handler

def my_exception_handler(exc, context):
    # ...

    return response

class MyView(APIView):
    exception_handler = my_exception_handler
    # ...

在上面的例子中,我们自定义了一个名为my_exception_handler的异常处理程序,并使用视图的define异常处理程序函数来定义如何使用异常处理程序。

  1. 身份验证和访问权限

DRF 提供多种身份验证和访问权限方法。您可以使用视图中的authentication_classes和permission_classes属性来指定使用的身份验证和访问权限。

from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated

class MyView(APIView):
    authentication_classes = [TokenAuthentication]
    permission_classes = [IsAuthenticated]
    # ...

在上面的例子中,我们使用TokenAuthentication方法和IsAuthenticated权限来限制只有通过Token认证的用户才能访问。

  1. Viewsets

DRF的viewset是将一组相关视图组织在一起的工具,可以简化视图定义和路由。

from rest_framework.viewsets import ModelViewSet
from myapp.models import User
from myapp.serializers import UserSerializer

class UserViewSet(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

在上面的示例中,我们定义了一个名为 UserViewSet 的视图集,其中包含常用的添加、删除、编辑和查询功能。

  1. 分页

DRF 提供了多种分页方法。您可以使用视图的 pagenation_class 属性指定使用的分页方法。

from rest_framework.pagination import PageNumberPagination

class MyView(APIView):
    pagination_class = PageNumberPagination
    # ...

在上面的例子中,我们使用PageNumberPagination分页方法对查询结果进行分页。

  1. 过滤和搜索

DRF提供多种过滤和搜索方法。您可以在视图上使用filter_backends属性来指定所使用的过滤和搜索方法。

from rest_framework.filters import SearchFilter

class MyView(APIView):
    filter_backends = [SearchFilter]
    search_fields = ['username']
    # ...

在上面的例子中,我们使用SearchFilter过滤和搜索方法来过滤和搜索查询结果。

  1. 限流

DRF提供多种限流方法。您可以使用视图上的throttle_classes属性来指定当前的节流模式。

from rest_framework.throttling import UserRateThrottle

class MyView(APIView):
    throttle_classes = [UserRateThrottle]
    # ...

在上面的例子中,我们使用UserRateThrottle限流方法来限制每个用户的访问速率。

以上是DRF的一般功能和使用方法。 DRF还提供了多种扩展工具和第三方库,帮助开发者更高效地开发RESTful API。

  1. 身份验证和访问权限

DRF 提供多种身份验证和访问权限控制方法。您可以使用视图中的authentication_classes和permission_classes属性来指定要使用的身份验证和权限控制方法。

from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import IsAuthenticated

class MyView(APIView):
    authentication_classes = [SessionAuthentication]
    permission_classes = [IsAuthenticated]
    # ...

在上面的示例中,我们使用 SessionAuthentication 身份验证方法和 IsAuthenticated 访问控制方法来管理用户访问权限。

  1. 版本控制

DRF提供版本控制功能。您可以在视图上使用 versioning_class 属性来指定所使用的版本控制方法。

from rest_framework.versioning import NamespaceVersioning

class MyView(APIView):
    versioning_class = NamespaceVersioning
    # ...

在上面的示例中,我们使用 NamespaceVersioning 版本控制方法来对 API 进行版本控制。

  1. 异常处理

DRF 提供了多种异常处理方法。您可以使用Exception_handler函数自定义视图中处理异常的方式。

from rest_framework.views import exception_handler

def custom_exception_handler(exc, context):
    response = exception_handler(exc, context)
    if response is not None:
        response.data['code'] = response.status_code
    return response

在上面的例子中,我们自定义了异常处理函数,将异常数据转换为JSON格式的响应数据。

  1. Serializer

DRF 的序列化器可以帮助开发人员将复杂的 Python 数据类型转换为 JSON 格式的数据,以便于传输和存储。

from rest_framework import serializers
from myapp.models import User

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

在上面的示例中,我们定义了一个名为 UserSerializer 的序列化器,它将用户模型转换为 JSON。

以上是DRF的一般功能和使用方法。 DRF还提供了多种扩展工具和第三方库,帮助开发者更高效地开发RESTful API。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门