首页 > 解决方案 > Django Rest Framework 在 has_permission 中获取参数

问题描述

我正在根据用户状态和地区过滤房地产查询集(最后一个带有 GET 参数)。

在views.py中我有这个:

class RealEstateView(APIView):
    serializer_class = RealEstateSerializer
    permission_classes = [RealEstatePermission]

    def get(self, request):
        district = self.request.query_params.get('pk')
        if district:
            serializer = RealEstateSerializer(RealEstate.objects.filter(owner_id=district), many=True)
        else:
            serializer = RealEstateSerializer(RealEstate.objects.all(), many=True)
        return Response(serializer.data)

如果用户是超级用户,他可以访问所有信息。如果用户不是超级用户,他只能访问他负责的地区的房地产。如果用户负责分区 with id=1,但发送 get param with id=2,我需要引发异常。但问题是我不知道如何访问has_permission函数中的 get 参数。在视图中执行此操作似乎不是一个好主意。

我已经试过了request.resolver_match.kwargs.get('id')view.kwargs.get('id')它们都是空的。

在权限.py 中:

class RealEstatePermission(permissions.BasePermission):

    def has_permission(self, request, view):
        if request.user.is_authenticated:
            if request.user.is_staff:
                return True

            ## HERE I need something like request.user.district.id == kwargs('id')
            if request.user.role == 'district_municipality':
                return True

使用 Django 3.0.5 和 DRF 3.11.0。

谢谢您的帮助。

标签: djangodjango-rest-framework

解决方案


要访问从 url 查询获取参数,您可以使用GETdict。

例子

网址:

/district?id=2

使用权:

district_id = request.GET['id']

推荐阅读