And*_*her 7 django django-rest-framework
我正在努力为使用 Django REST Framework 构建的 API 构建权限。假设我有以下模型:
from django.db import models
class Study(models.Model):
pass
class Result(models.Model):
study = models.ForeignKey(Study)
value = models.IntegerField(null=False)
Run Code Online (Sandbox Code Playgroud)
我有这两个模型的基本序列化器和视图。我将使用每个对象的权限来授予用户对一项或多项研究的访问权限。我希望用户只能查看他们有权限的Resulta 。Study我可以想到两种方法来做到这一点,但似乎都不理想:
Result与 保持同步Study。这只是一个不可能的事情,因为我们想要Study永远成为真相的来源。Study当用户尝试访问Result. 这实际上还不错,但我找不到其他人这样做的例子,这让我觉得我的想法可能从根本上是错误的。是否有现有的解决方案?或者自定义权限类是可行的方法吗?如果是这样,您是否有其他人以这种方式实施的例子?
Suh*_*yap -1
正如您所说,您可以按照第二种方式进行自定义权限:并将该权限包含在您的视图中:
我正在考虑您的研究模型与一些参数课程,基于此我正在编写您可以考虑研究模型中任何元素的解决方案
模型.py
from django.db import models
class Study(models.Model):
course = models.CharField(max_length=50)
class Result(models.Model):
study = models.ForeignKey(Study)
value = models.IntegerField(null=False)
Run Code Online (Sandbox Code Playgroud)
在许可.py
from rest_framework import permissions
class ResultOrReadOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS and obj.study.course == request.GET.get('course') :
# read only requests
return True
else:
# other requests such as post, patch, put
return obj.study == request.GET.get('course')
Run Code Online (Sandbox Code Playgroud)
并包括,
class ReviewDetail(viewsets.ViewSet):
permission_classes =[ResultOrReadOnly]
Run Code Online (Sandbox Code Playgroud)
在 urls.py 中,
修改为接受URL参数当然
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |