Получите данные пользователей и групповые разрешения в остальных API

В моем приложении API для отдыха на Python я успешно включил набор инструментов django oauth2 и получаю токен доступа при входе в систему. Теперь мне нужно написать API, чтобы получить сведения о текущем вошедшем в систему пользователе, информацию о его группе и групповые разрешения.

Мои urls.py

url(r'me', get_me),

Мои сериализаторы.py

class UserGroupSerializer(serializers.ModelSerializer):
    permissions = serializers.SerializerMethodField(required=False)
    groups = serializers.SerializerMethodField(required=False)

    def get_groups(self, obj):
        group_list = []
        for group in obj.groups.all():
            group_list.append(group.name)
        return group_list


    def get_permissions(self, obj):
        permissions = []
        for group in obj.groups.all():
            group_permissions = group.permissions.all().values_list('codename', flat=True)
            for group_permission in group_permissions:
                permissions.append(group_permission)
        return permissions

    class Meta:
        model = get_user_model()
        exclude = ('password','user_permissions',)
        #fields = '__all__'

Мои просмотры.py

def get_me(request):
    user = request.user
    return {
       'user': UserGroupSerializer(user).data,
    }

Когда я вызываю этот API, я получаю следующую ошибку:

Представление account.views.get_me не вернуло объект HttpResponse. Вместо этого он вернул None.

В чем проблема? Это правильный метод, которым я следую?


person Arun SS    schedule 24.01.2017    source источник


Ответы (1)


Вы должны вернуть значение с помощью HttpResponse или другой функции ответа для вашей функции get_me.

DRF способ сделать это:

from rest_framework.response import Response
from rest_framework import status
from rest_framework.decorators import api_view

@api_view(['GET'])
def my_funct(request):
        user = request.user
        return Response({'user': UserGroupSerializer(user).data}, status=status.HTTP_200_OK)
person Umut Gunebakan    schedule 24.01.2017
comment
Это не работает. показывает эту ошибку AssertionError at /api/v1/me .accepted_renderer не установлен в ответе - person Arun SS; 24.01.2017
comment
Да. Это сработало. Спасибо. Это лучший способ получить данные пользователя и разрешения? - person Arun SS; 24.01.2017
comment
Группы и разрешения хранятся в виде моделей в БД. Я бы сначала создал сериализаторы групп и разрешений, а затем добавил бы эти сериализаторы в UserGroupSerializer. В конце дня вы увидите вложенные группы и разрешения в массиве JSON в качестве ответа. - person Umut Gunebakan; 24.01.2017