Django REST Framework (DRF) 初学者教程
Django REST Framework (DRF) 是一个基于 Django 框架的强大的 Web API 框架,提供了用于构建 RESTful API 的各种工具。它为我们提供了许多开箱即用的功能,例如序列化、验证、文档、渲染和视图,使我们能够快速创建强大的 Web API。
以下是DRF的基本用法:
- 安装DRF。可以使用 pip 命令安装:pip install djangorestframework。
- 将DRF应用程序添加到Django项目的settings.py文件中:
INSTALLED_APPS = [ # ... 'rest_framework', ]
- 写入序列化。序列化器用于将 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 参数指定要序列化的字段。
- 编写视图函数。视图函数用于处理 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 参数指定要使用的序列化器。
- 指定 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还提供了许多其他功能和工具,例如身份验证、分页、过滤、搜索、排序、视图、路由、视图装饰等,可以根据需要使用和配置。
以下是一些常用功能的介绍:
- 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 权限来限制仅对经过身份验证的用户进行访问。
- Pagination
DRF 提供了多种分页方法,如 PageNumberPagination、LimitOffsetPagination、CursorPagination 等。您可以使用分页类属性在视图中指定分页方法。
from rest_framework.pagination import PageNumberPagination class UserList(generics.ListCreateAPIView): pagination_class = PageNumberPagination # ...
在上面的例子中,我们使用PageNumberPagination分页方法。
- 过滤、搜索、排序
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属性来定义要搜索和排序的字段。
- 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 等。
- 路由
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。
- 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 模型的所有字段包含在序列化结果中。
- 异常处理
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异常处理程序函数来定义如何使用异常处理程序。
- 身份验证和访问权限
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认证的用户才能访问。
- 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 的视图集,其中包含常用的添加、删除、编辑和查询功能。
- 分页
DRF 提供了多种分页方法。您可以使用视图的 pagenation_class 属性指定使用的分页方法。
from rest_framework.pagination import PageNumberPagination class MyView(APIView): pagination_class = PageNumberPagination # ...
在上面的例子中,我们使用PageNumberPagination分页方法对查询结果进行分页。
- 过滤和搜索
DRF提供多种过滤和搜索方法。您可以在视图上使用filter_backends属性来指定所使用的过滤和搜索方法。
from rest_framework.filters import SearchFilter class MyView(APIView): filter_backends = [SearchFilter] search_fields = ['username'] # ...
在上面的例子中,我们使用SearchFilter过滤和搜索方法来过滤和搜索查询结果。
- 限流
DRF提供多种限流方法。您可以使用视图上的throttle_classes属性来指定当前的节流模式。
from rest_framework.throttling import UserRateThrottle class MyView(APIView): throttle_classes = [UserRateThrottle] # ...
在上面的例子中,我们使用UserRateThrottle限流方法来限制每个用户的访问速率。
以上是DRF的一般功能和使用方法。 DRF还提供了多种扩展工具和第三方库,帮助开发者更高效地开发RESTful API。
- 身份验证和访问权限
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 访问控制方法来管理用户访问权限。
- 版本控制
DRF提供版本控制功能。您可以在视图上使用 versioning_class 属性来指定所使用的版本控制方法。
from rest_framework.versioning import NamespaceVersioning class MyView(APIView): versioning_class = NamespaceVersioning # ...
在上面的示例中,我们使用 NamespaceVersioning 版本控制方法来对 API 进行版本控制。
- 异常处理
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格式的响应数据。
- 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前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。