>
获取has_permission()时缺少1个必需的位置参数:“view”而不是JSON响应
从rest_framework导入过滤器从rest_framework导入视图集从rest_framework.permissions导入
从apps.fm.models.asset import资产从apps.fm.serializers导入AssetSerializer从django.shortcuts导入渲染,重定向自django.urls导入反向
class AssetViewSet(viewsets.ModelViewSet):model=Asset serializer_class=AssetSerializer permission_classes=[IsAuthenticated]filter_backends=[filters.SearchFilter,filters.OrderingFilter]search_fields=['name']ordering_fields=['id']ordering=['-id']
def get_permissions(self):
uagent = ['Chrome','Firefox']
if self.request.user_agent.browser.family in uagent:
return []
return [IsAuthenticated]
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
uagent = ['Chrome','Firefox']
if self.request.user_agent.browser.family in uagent:
authentication_classes = [] #disables authentication
permission_classes = [] #disables permission
return redirect(reverse("feedback")+"?type=Asset&id="+str(instance.id))
serializer = self.get_serializer(instance)
return Response(serializer.data)
def get_queryset(self):
queryset = self.model.objects.all()
return queryset
get_permissions
应该返回权限类的实例,您当前正在返回类
def get_permissions(self):
uagent = ['Chrome','Firefox']
if self.request.user_agent.browser.family in uagent:
return []
return [IsAuthenticated()] # Create an instance of the permission class
或者更好,因为您已经在视图集上设置了< code>permission_classes,所以您可以只调用< code>super
def get_permissions(self):
uagent = ['Chrome','Firefox']
if self.request.user_agent.browser.family in uagent:
return []
return super().get_permissions()