Django restframework CBV

  • APIview:是django中view的子类,其主要区别在于
    1. 传递给REST框架的请求是Request类,而不是HttpRequest
      1. 解析相关
        1. request.data:类似于request.POST
        2. request.query_params:类似于request.GET
      2. 认证相关
        1. request.user:认证用户
        2. request.auth:认证token
      3. 浏览器相关
        1. request.method:['get','post','put']
        2. request.content_type:
    2. 返回的值值Response类,而不是HttpResponse
      1. Response(data, status=None, template_name=None, headers=None, content_type=None)
        1. data:没经渲染的,序列化数据
    3. 任何APIException异常都将被捕获并调解为适当的响应
    4. 在将请求分派到处理程序方法之前,将对传入的请求进行身份验证并进行适当的权限和/或限制检查
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions
from django.contrib.auth.models import User

class ListUsers(APIView):
    """
    View to list all users in the system.

    * Requires token authentication.
    * Only admin users are able to access this view.
    """
    authentication_classes = [authentication.TokenAuthentication]
    permission_classes = [permissions.IsAdminUser]

    def get(self, request, format=None):
        """
        Return a list of all users.
        """
        usernames = [user.username for user in User.objects.all()]
        return Response(usernames)
  • Generic views:通用视图,可以理解为一个已经封装好的,常用方法的类,如果这些方法不适合,可以下降至APIview进行编写
    1. 属性:
      1. queryset:应该用于从该视图返回对象的查询集
      2. serializer_class:应该用于验证和反序列化输入以及序列化输出的序列化器类
      3. lookup_field:用于执行单个模型实例的对象查找的模型字段,默认为pk
      4. pagination_class:对列表进行分页时应使用的分页类
    2. 方法:所有以下方法都可以重写
      1. get_queryset(self)
      2. get_object(self)
      3. filter_queryset(self, queryset)
      4. get_serializer_class(self)
      5. filter_backends:应该用于过滤查询集的过滤器后端类的列表
#example
class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [IsAdminUser]

    def list(self, request):
        # Note the use of `get_queryset()` instead of `self.queryset`
        queryset = self.get_queryset()
        serializer = UserSerializer(queryset, many=True)
        return Response(serializer.data)

#重写方法
def get_queryset(self):
    user = self.request.user
    return user.accounts.all()

def get_object(self):
    queryset = self.get_queryset()
    filter = {}
    for field in self.multiple_lookup_fields:
        filter[field] = self.kwargs[field]

    obj = get_object_or_404(queryset, **filter)
    self.check_object_permissions(self.request, obj)
    return obj

def filter_queryset(self, queryset):
    filter_backends = [CategoryFilter]

    if 'geo_route' in self.request.query_params:
        filter_backends = [GeoRouteFilter, CategoryFilter]
    elif 'geo_point' in self.request.query_params:
        filter_backends = [GeoPointFilter, CategoryFilter]

    for backend in list(filter_backends):
        queryset = backend().filter_queryset(self.request, queryset, view=self)

    return queryset
  • Minins:Generic views可以继承一系列的Minins类,来更快更好的编写代码
    • MININS 类
      1. ListModelMixin:Provides a .list(request, *args, **kwargs) method, that implements listing a queryset.
      2. CreateModelMixin:Provides a .create(request, *args, **kwargs) method, that implements creating and saving a new model instance.
      3. RetrieveModelMixin:Provides a .retrieve(request, *args, **kwargs) method, that implements returning an existing model instance in a response.
      4. UpdateModelMixin:Provides a .update(request, *args, **kwargs) method, that implements updating and saving an existing model instance.
      5. DestroyModelMixin:Provides a .destroy(request, *args, **kwargs) method, that implements deletion of an existing model instance.
    • 具体继承GV与MININS类的实现类

      1. CreateAPIView, extends from: GenericAPIView,CreateModelMixin, POST

      2. ListAPIView, extends from:GenericAPIView,ListModelMixin, GET

      3. RetrieveAPIView, extends from:GenericAPIView,RetrieveModelMixin, GET

      4. DestroyAPIView, extends from:GenericAPIView,DestroyModelMixin, DELET

      5. UpdateAPIView, extends from:GenericAPIView,UpdateModelMixin, PUT-PATCH

      6. ListCreateAPIView, extends from:GenericAPIView,ListModelMixin,CreateAPIView, GET-POST

      7. RetrieveUpdateAPIView, extends from:GenericAPIView,RetrieveAPIView,UpdateAPIView, GET-PUT-PATCH

      8. RetrieveDestroyAPIView, extends from:GenericAPIView,RetrieveAPIView,DestroyAPIView, GET-DELETE

      9. RetrieveUpdateDestroyAPIView, extends from:GenericAPIView,RetrieveAPIView,DestroyAPIView,UpdateAPIView, GET-PUT-PATCH-DELETE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值