django - 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。
谢谢您的帮助。
解决方案
要访问从 url 查询获取参数,您可以使用GET
dict。
例子
网址:
/district?id=2
使用权:
district_id = request.GET['id']
推荐阅读
- php - 如何使下拉框和描述框验证字段?
- javascript - 本地存储中的数据在传递到 php 时被修改
- c++ - 错误完美转发 lamda - 丢弃限定符
- hive - 从 Hive 的同一列中提取 ang join
- java - Adobe Acrobat Reader 无法打开 pdf 文件,因为它不是受支持的文件类型或文件已损坏
- ios - 颤振小部件中是否存在前导/尾随约束而不是左/右?
- amazon-web-services - AWS JAVA SDK V2 - 如何使用元数据服务
- html - 无法将值设置为 select2 下拉菜单
- java - 只需更新实体而不在 Spring Boot 项目中的数据库中插入新记录
- c - 如何在自定义 printf 中使用参数 const char *format