GenericAPIView常用方法

class GenericAPIView(views.APIView):
    queryset = None
    serializer_class = None
    lookup_field = 'pk'
    lookup_url_kwarg = None
    filter_backends = api_settings.DEFAULT_FILTER_BACKENDS
    pagination_class = api_settings.DEFAULT_PAGINATION_CLASS

def get_object(self):
    queryset = self.filter_queryset(self.get_queryset())} # 拿到查询集
    obj = get_object_or_404(queryset, **filter_kwargs) # 拿到通过pk查询出来的模型
    self.check_object_permissions(self.request, obj) # 权限校验
    return obj

def get_serializer(self, *args, **kwargs):
  serializer_class = self.get_serializer_class()
  kwargs.setdefault('context', self.get_serializer_context()) # 往ser中追加了一些信息
  return serializer_class(*args, **kwargs)# BaseSerializer(*args,**kwargs)


# 
def get_serializer_context(self):
 return {
       'request': self.request,
       'format': self.format_kwarg,
       'view': self
  }


def check_object_permissions(self, request, obj):
    for permission in self.get_permissions():
        if not permission.has_object_permission(request, self, obj):
            self.permission_denied(
                request,
                message=getattr(permission, 'message', None),
                code=getattr(permission, 'code', None)
            )
def permission_denied(self, request, message=None, code=None):
  if request.authenticators and not request.successful_authenticator: # 判断是否有登录认证通过
        raise exceptions.NotAuthenticated()
    raise exceptions.PermissionDenied(detail=message, code=code)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值