Django REST Framework (DRF)菜鸟入门实例教程

2023-05-0706:54:50后端程序开发Comments2,521 views2字数 6949阅读模式

Django REST Framework (DRF) 是基于 Django 框架的一个强大的 Web API 框架,提供了多种工具和库来构建 RESTful API。它为我们提供了许多开箱即用的功能,例如序列化、验证、文档化、渲染和视图,使我们能够快速构建出功能强大的 Web API。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

下面是 DRF 的基本使用方法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 安装 DRF。可以使用 pip 命令进行安装:pip install djangorestframework。
  2. 在 Django 项目的 settings.py 文件中添加 DRF 的应用:
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 的序列化器。我们通过 fields 参数指定了要序列化的字段。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  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 参数指定了要使用的序列化器。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 配置 URL。我们需要将视图函数映射到 URL,可以使用 Django 的 urls.py 文件来配置 URL。
from django.urls import path
from myapp.views import UserList

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

在上面的例子中,我们使用 path 函数将 /users/ URL 映射到 UserList 视图函数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

以上是 DRF 的基本使用方法。除此之外,DRF 还提供了许多其他功能和工具,例如身份验证、分页、过滤、搜索、排序、视图集、路由、视图装饰器等,可以根据需求进行使用和配置。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

下面是一些常用的功能介绍:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 身份验证

DRF 提供了多种身份验证方式,包括 BasicAuthentication、SessionAuthentication、TokenAuthentication 等。可以在视图中使用 authentication_classes 属性来指定身份验证方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

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

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

在上面的例子中,我们使用 SessionAuthentication 身份验证方式,同时还使用 IsAuthenticated 权限来限制只有已经验证通过的用户才能访问。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 分页

DRF 提供了多种分页方式,包括 PageNumberPagination、LimitOffsetPagination、CursorPagination 等。可以在视图中使用 pagination_class 属性来指定分页方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

from rest_framework.pagination import PageNumberPagination

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

在上面的例子中,我们使用 PageNumberPagination 分页方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 过滤、搜索、排序

DRF 提供了多种过滤、搜索、排序方式,可以通过查询字符串参数来进行配置。可以在视图中使用 filter_backends 属性来指定要使用的过滤、搜索、排序方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

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 属性来指定要搜索和排序的字段。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 视图集

DRF 提供了多种视图集,包括 ModelViewSet、ReadOnlyModelViewSet、ViewSet 等。可以使用视图集来组织和管理视图函数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

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 的视图,它包含了多个方法来处理 GET、POST、PUT、DELETE 等 HTTP 请求。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 路由

DRF 提供了多种路由方式,包括 SimpleRouter、DefaultRouter、NestedSimpleRouter、NestedDefaultRouter 等。可以使用路由来组织和管理 URL。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

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 中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 序列化器

DRF 的序列化器是将 Django 模型转换为 JSON、XML、YAML 等格式的工具。序列化器还提供了反序列化功能,可以将 JSON、XML、YAML 等格式的数据转换为 Django 模型。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

from rest_framework import serializers
from myapp.models import User

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

在上面的例子中,我们定义了一个名为 UserSerializer 的序列化器,它将 User 模型转换为 JSON 格式。通过设置 fields 属性为 __all__,我们将 User 模型的所有字段都包含在了序列化结果中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 异常处理

DRF 提供了多种异常处理方式,可以在视图中使用 exception_handler 属性来自定义异常处理方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

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 的异常处理函数,并在视图中使用 exception_handler 属性来指定使用该异常处理函数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 认证和权限

DRF 提供了多种认证和权限方式,可以在视图中使用 authentication_classes 和 permission_classes 属性来指定使用的认证和权限方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

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

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

在上面的例子中,我们使用 TokenAuthentication 认证方式和 IsAuthenticated 权限来限制只有已经通过 Token 认证的用户才能访问。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 视图集

DRF 的视图集是将一组相关的视图组织在一起的工具,可以简化视图的定义和路由的配置。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

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 的视图集,它包含了常用的增删改查操作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 分页

DRF 提供了多种分页方式,可以在视图中使用 pagination_class 属性来指定使用的分页方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

from rest_framework.pagination import PageNumberPagination

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

在上面的例子中,我们使用 PageNumberPagination 分页方式来对查询结果进行分页。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 过滤和搜索

DRF 提供了多种过滤和搜索方式,可以在视图中使用 filter_backends 属性来指定使用的过滤和搜索方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

from rest_framework.filters import SearchFilter

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

在上面的例子中,我们使用 SearchFilter 过滤和搜索方式来对查询结果进行过滤和搜索。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 限流

DRF 提供了多种限流方式,可以在视图中使用 throttle_classes 属性来指定使用的限流方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

from rest_framework.throttling import UserRateThrottle

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

在上面的例子中,我们使用 UserRateThrottle 限流方式来限制每个用户的访问频率。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

以上是 DRF 的一些常用功能和使用方法,DRF 还提供了多种扩展工具和第三方库,可以帮助开发者更加高效地开发 RESTful API。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 身份验证和权限

DRF 提供了多种身份验证和权限控制方式,可以在视图中使用 authentication_classes 属性和 permission_classes 属性来指定使用的身份验证和权限控制方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

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

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

在上面的例子中,我们使用 SessionAuthentication 身份验证方式和 IsAuthenticated 权限控制方式来控制用户访问权限。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 版本控制

DRF 提供了版本控制的功能,可以在视图中使用 versioning_class 属性来指定使用的版本控制方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

from rest_framework.versioning import NamespaceVersioning

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

在上面的例子中,我们使用 NamespaceVersioning 版本控制方式来对 API 进行版本控制。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 异常处理

DRF 提供了多种异常处理方式,可以在视图中使用 exception_handler 函数来自定义异常处理方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

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 格式的响应数据。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  1. 序列化器

DRF 的序列化器可以帮助开发者将复杂的 Python 数据类型转换为 JSON 格式的数据,以便于传输和存储。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

from rest_framework import serializers
from myapp.models import User

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

在上面的例子中,我们定义了一个名为 UserSerializer 的序列化器,将 User 模型转换为 JSON 格式的数据。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

以上是 DRF 的一些常用功能和使用方法,DRF 还提供了多种扩展工具和第三方库,可以帮助开发者更加高效地开发 RESTful API。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38626.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/38626.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定