Авторизация токена Django Rest Framework

Я знаю, что на этот вопрос уже был дан ответ, но ответ не скрыл моего замешательства.

Итак, у меня есть представление, которое проверяет правильность имени пользователя и пароля -

@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 возвращал данные для этого пользователя, а не возвращал данные для всех пользователей.


person Sushant    schedule 16.09.2016    source источник


Ответы (1)


объект запроса будет содержать пользователя (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, чтобы разрешить доступ только к объектам пользователя.

person pratyush    schedule 16.09.2016