【问题标题】:How to ensure that users can only access/update data created by them如何确保用户只能访问/更新他们创建的数据
【发布时间】:2018-10-24 09:48:15
【问题描述】:

我希望创建一个 API,允许用户访问/更新仅由他们上传的图书的详细信息。用户不应有权访问/更新由其他人创建的图书。

这是我的models.py

from django.contrib.auth.models import User

class Project(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    name = models.CharField(max_length=200)


class Book(models.Model):
    project = models.ForeignKey(Project,on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    total_pages = models.IntegerField()

这是我的serializers.py

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = "__all__"

这是我的views.py

class BookDetails(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = BookSerializer
    queryset = Book.objects.all()

如何修改views.py,使用户只能访问/更新他创建的书籍?

【问题讨论】:

标签: django django-rest-framework drf-queryset


【解决方案1】:

在您的视图中使用get_queryset 方法并根据经过身份验证的用户过滤查询集:

class BookDetails(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = BookSerializer

    def get_queryset(self):
        user = self.request.user
        return Book.objects.filter(project__user=user)

【讨论】:

  • 这样可以确保用户无法访问其他用户的图书,但也可以确保用户无法编辑其他用户的图书?
  • 是的,您的视图在编辑、删除或检索时调用get_object 方法来查找用户请求的图书。和get_object 搜索get_queyset 方法返回的qureyset 中的实例。
猜你喜欢
  • 2019-03-23
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 2022-01-16
  • 2014-12-18
相关资源
最近更新 更多