【问题标题】:Make database entries viewable by user permissions通过用户权限使数据库条目可见
【发布时间】:2014-06-10 15:26:27
【问题描述】:

我有一个与数据库交互的 Django REST Framework 后端。在我的应用程序中,我希望有一个联系人部分,每个用户都可以在其中将自己的联系人添加到数据库中,但只能看到他们添加的联系人。就目前而言,我可以从数据库中获得任何经过身份验证的用户 POST 或 GET,但它是一个“集体”数据库,每个用户都可以看到彼此的联系人。但是,我无法准确地找到 如何 我这样做。在我看来,我有一些概念性的解决方案,但我都不太明白我需要在代码中实际添加什么才能使其正常工作。

这里是联系人的精简views.py:

@api_view(['GET','POST','DELETE' ])
@permission_classes((IsAuthenticated,))
def contacts_list(request):
  if (request.method == 'GET'):
    contacts = Contact.objects.all()
    contacts_serializer = ContactSerializer(contacts, many=True)
    return Response(contacts_serializer.data)
  elif (request.method == 'POST'):
    //post stuff happens here...
  elif (request.method == 'DELETE'):
    //Delete stuff happens here...

理论解决方案1:为每个联系人添加一个新元素,该元素是“属于”标识符。拉起联系人时,只选择与所属标识符匹配的联系人。

理论解决方案 2:创建单独的联系人列表 - 因此,当您发布时,您将发布到您自己的列表中,而当您获得时,您将获得整个列表。

理论解决方案 3:找到 Django 或 DRF 中内置的东西,使其更容易......我无法做到,特别是因为我真的不知道我应该做什么正在寻找。

【问题讨论】:

    标签: django permissions django-rest-framework


    【解决方案1】:

    您的理论解决方案 1 将是这样做的方法,因为如果您首先存储创建它的用户,您只能获取由特定用户创建的项目。完成此操作后,您需要按如下方式更新视图

    @api_view(['GET','POST','DELETE' ])
    @permission_classes((IsAuthenticated,))
    def contacts_list(request):
      if (request.method == 'GET'):
        contacts = Contact.objects.filter(created_by=request.user)
        contacts_serializer = ContactSerializer(contacts, many=True)
        return Response(contacts_serializer.data)
      elif (request.method == 'POST'):
        //post stuff happens here...
      elif (request.method == 'DELETE'):
        //Delete stuff happens here...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多