几个例子让新手快速了解Django REST Framework (DRF)
Django REST Framework (DRF) 是基于 Django 框架的一个强大的 Web API 框架,提供了多种工具和库来构建 RESTful API。它为我们提供了许多开箱即用的功能,例如序列化、验证、文档化、渲染和视图,使我们能够快速构建出功能强大的 Web API。
下面是 DRF 的基本使用方法:
安装 DRF。可以使用 pip 命令进行安装:pip install djangorestframework。
在 Django 项目的 settings.py 文件中添加 DRF 的应用:
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 的序列化器。我们通过 fields 参数指定了要序列化的字段。
编写视图函数。视图函数用于处理 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()), ]
在上面的例子中,我们使用 path 函数将 /users/ URL 映射到 UserList 视图函数。
以上是 DRF 的基本使用方法。除此之外,DRF 还提供了许多其他功能和工具,例如身份验证、分页、过滤、搜索、排序、视图集、路由、视图装饰器等,可以根据需求进行使用和配置。
下面是一些常用的功能介绍:
身份验证
DRF 提供了多种身份验证方式,包括 BasicAuthentication、SessionAuthentication、TokenAuthentication 等。可以在视图中使用 authentication_classes 属性来指定身份验证方式。
from rest_framework.authentication import SessionAuthentication from rest_framework.permissions import IsAuthenticated class UserList(generics.ListCreateAPIView): authentication_classes = [SessionAuthentication] permission_classes = [IsAuthenticated] # ...
在上面的例子中,我们使用 SessionAuthentication 身份验证方式,同时还使用 IsAuthenticated 权限来限制只有已经验证通过的用户才能访问。
分页
DRF 提供了多种分页方式,包括 PageNumberPagination、LimitOffsetPagination、CursorPagination 等。可以在视图中使用 pagination_class 属性来指定分页方式。
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 属性来指定要搜索和排序的字段。
视图集
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 的视图,它包含了多个方法来处理 GET、POST、PUT、DELETE 等 HTTP 请求。
路由
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 中。
序列化器
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 的序列化器,它将 User 模型转换为 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 的异常处理函数,并在视图中使用 exception_handler 属性来指定使用该异常处理函数。
认证和权限
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 认证的用户才能访问。
视图集
DRF 的视图集是将一组相关的视图组织在一起的工具,可以简化视图的定义和路由的配置。
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 提供了多种分页方式,可以在视图中使用 pagination_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 格式的响应数据。
序列化器
DRF 的序列化器可以帮助开发者将复杂的 Python 数据类型转换为 JSON 格式的数据,以便于传输和存储。
from rest_framework import serializers from myapp.models import User class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = '__all__'
在上面的例子中,我们定义了一个名为 UserSerializer 的序列化器,将 User 模型转换为 JSON 格式的数据。
以上是 DRF 的一些常用功能和使用方法,DRF 还提供了多种扩展工具和第三方库,可以帮助开发者更加高效地开发 RESTful API。
文章评论 0