Django Как получить данные с помощью POST и вернуть данные с помощью сериализатора - PullRequest
0 голосов
/ 04 октября 2018

Как использовать POST для извлечения единичных данных на моделях?

Вначале я хотел передать карту параметров.Затем представление на стороне сервера позаботится о считывании необходимых параметров на карте и вернет ответ.

Когда я проверял это в Postman, я отправляю тело запроса с электронной почтой и паролем, но затемвозвращает ошибку: «требуется имя»

Я хочу, чтобы этот API работал как универсальный.Получить, но не с URL, а вместо POST

Models.py

class Member(models.Model):
  name = models.CharField(max_length=100)
  password = models.CharField(max_length=100)
  email = models.EmailField(unique=True)
  phone = models.IntegerField(default=9999)

serializer.py

class LoginMemberSerializer(serializers.ModelSerializer):
  class Meta:
    model = Member
    fields =[
        'name',
        'password',
        'email',
        'phone',
    ]

view.py

class LoginMemberAPI(APIView):
    def get_queryset(self):
        return Member.objects.all()

    def post(self, request, format=None):
        serializer = LoginMemberSerializer(data=request.data)
        if serializer.is_valid():
            print(serializer.validated_data['email'])
            member = Member.objects.get(name = str(serializer.validated_data['name']))
            # serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors)

Example from my postman

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Ваш сериализатор использует поля модели, а в вашей модели 'Member' все поля обязательны для заполнения.Вы не можете сделать это с тем же Serializer.Вы можете создать отдельные сериализаторы для проверки и для возврата сериализованного ответа.Что-то вроде этого.Сериализатор для ответа:

class MemberSerializer(serializers.ModelSerializer):
    class Meta:
        model = Member
        # '__all__' will include all fields of models
        fields = '__all__'

Сериализатор для проверки этого API:

class LoginMemberSerializer(serializers.ModelSerializer):
    class Meta:
        model = Member
        fields =[
             'name',
             'password',
             ]
0 голосов
/ 04 октября 2018

Ну, действительно, сериализатор недопустим, так как предполагается, что он является полным представлением модели, а вы отправляете только одно поле.

В действительности нет смысла использоватьСериализатор для этого.Просто используйте данные для запроса к БД и , затем создайте сериализатор для ответа:

member = Member.objects.get(**request.POST)
serializer = LoginMemberSerializer(member)
return Response(serializer.data)

Я бы сказал, тот факт, что вы боретесь с этим, должен быть в состоянии указать, что этоэто не то, что нужно делать.POST предназначен для отправки данных, которые обновляют базу данных, а не для извлечения данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...