Django Rest Framework令牌身份验证

时间:2016-09-16 11:48:24

标签: django authentication django-rest-framework django-rest-auth

我知道这个问题之前已经得到了回答,但答案并没有解决我的困惑。

所以我有一个视图,用户名和密码检查用户是否正确 -

@api_view(['POST'])
def example_view(request, format=None):
  username = request.data.get("username")
  password = request.data.get("password")
  content = {}
  try:
    user = User.objects.get(username=username)
    if user.check_password(password):
      content = {'user': unicode(user.username),'token': unicode(user.auth_token),}
    else:
      content = {'wrong password'}
  except User.DoesNotExist:
    content = {
        'not registered',
        }
  return Response(content)

如果用户名和密码正确,我发帖子请求并返回令牌。

现在我制作了一个模型 -

class Check(models.Model):
  owner = models.ForeignKey(User,verbose_name = 'UserName')
  mood = models.TextField(null=True)

我有一个相同型号的功能 -

@api_view(['GET'])
def CheckApi(request):
  authentication_classes = (TokenAuthentication,)
  permission_classes = (IsAuthenticated,)

  ?? query_set = Check.objects.get(owner=

  serializer = CheckSerializer(qs, many=True)
  return Response(serializer.data) 

和它的序列化器 -

class CheckSerializer(serializers.ModelSerializer):
class Meta:
    model = Check
    fields = ('__all__')

我基本上想要做的是在用户进行身份验证之后,我希望api返回那个用户的数据,而不是为所有用户返回数据

1 个答案:

答案 0 :(得分:0)

请求对象将包含用户(request.user)。

http://www.django-rest-framework.org/api-guide/views/#api-policy-decorators

@api_view(['GET'])
@authentication_classes(TokenAuthentication,)
@permissions_classes(IsAuthenticated,)
def CheckApi(request):
    authentication_classes = (TokenAuthentication,)
    permission_classes = (IsAuthenticated,)

    query_set = Check.objects.get(owner=request.user)

    serializer = CheckSerializer(qs, many=True)
    return Response(serializer.data) 

如果您打算使用类视图集,请重载get_queryset以仅允许访问用户的对象。