- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
CommentCreate 是一个CreateAPIView
,用于在另一个“报告”模型上发表评论。我需要阻止非报告作者或不属于允许发表评论的指定人员组的任何人使用此端点创建评论。
class CommentCreate(generics.CreateAPIView):
serializer_class = CommentSerializer
queryset = Comment.objects.none()
def check_object_permissions(self, request, obj):
if obj.report.creator != request.user:
# also check if request.user is in the group of people that can comment
raise exceptions.PermissionDenied(
detail='You do not have permission')
我面临的问题是 check_object_permissions
被调用,但异常没有在任何地方被捕获,因此无论如何,评论都会正常发布。我在这里缺少什么?
最佳答案
创建 Comment
时,不会调用 check_object_permissions
方法。
以下是 CreateAPIView
的完整 create
代码:
class CreateModelMixin(object):
"""
Create a model instance.
"""
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def perform_create(self, serializer):
serializer.save()
def get_success_headers(self, data):
try:
return {'Location': data[api_settings.URL_FIELD_NAME]}
except (TypeError, KeyError):
return {}
check_object_permissions
仅在 get_object
中调用,而 get_object
本身仅在您尝试通过 API 检索对象时调用。
为了在 CommentCreate
中进行权限检查,您应该重写其中的 perform_create
方法并进行检查:
class CommentCreate(generics.CreateAPIView):
serializer_class = CommentSerializer
queryset = Comment.objects.none()
def perform_create(self, serializer):
# untested if...
if serializer.validated_data['report'].creator != self.request.user:
raise exceptions.PermissionDenied(
detail='You do not have permission')
serializer.save()
关于django - 使用 CreateAPIView 检查对象权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39213898/
我想根据某些标准限制用户可以上传图片的类别。在下面的代码中,我可以在网站上执行我想要的操作。 class PhotoUploadForm(forms.ModelForm): class Met
CommentCreate 是一个CreateAPIView,用于在另一个“报告”模型上发表评论。我需要阻止非报告作者或不属于允许发表评论的指定人员组的任何人使用此端点创建评论。 class Comm
我要回复 CreateAPIView像这样的返回 Response( { 'status': status_code.HTTP_200_OK,
我使用 Django rest 框架 CreateAPIView 创建一些数据,这里是 View 。 class CompanyCreateApiView(CreateAPIView): de
我正在尝试从 django-rest-framework 实现一个简单的 View 集,除创建 View 外,一切正常。 ulr ( http://127.0.0.1:8000/api/create/
我是 django 和 python 的新手,需要一些帮助。目前可以对存储数据的我的应用程序进行 API 调用。但是我需要在存储之后做一些业务逻辑。我该怎么做。 我的看法: class ProcLis
我尝试创建一个 View ,它将接受 POST 请求并创建我的模型的新实例(见帖子底部)。我关注 this教程。问题是,当我访问从 CreateAPIView 继承的与 View 关联的 URL 时,
我的 Django 应用程序的 views.py 如下, class MemberCreate(generics.CreateAPIView): queryset = members.obje
我的目标与 this question 中提出的问题非常相似。但从 DRF 的角度来看,而不是形式。 所以基本上问题是,如何在以下代码片段中获取新创建的对象: TestSerializer(seria
我查看了 CreateAPIView 的代码,在创建过程中没有检查权限。所以我决定在 perform_create 钩子(Hook)中检查它们,如下所示: class CourseList(gener
我正在使用 Django Rest Framework CreateAPIView 来创建评论。到目前为止一切正常,这是我的代码。 模型 class Posts(models.Model):
我在网站上有一个联系表单,该表单正在发布到 CreateAPIView 以创建模型的新实例(最终通过电子邮件发送给管理员)。在我的序列化器上,我有一个蜜 jar 字段来帮助拒绝垃圾邮件。 型号: cl
我试图找出是否可以使用 Django Rest 框架中的通用 api 方法在同一 View 中发布和修补。我不认为有任何通用类允许完全创建和更新,任何人都可以告诉我下面的配置是否允许我在同一 View
我是一名优秀的程序员,十分优秀!