Django rest создает пользователя, если логин не существует

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

Моя проблема: я отправляю post-запрос из интерфейса, который состоит из логина и пароля. В серверной части (Django) Мне нужно проверить, существует ли пользователь с этим логином. А затем отправляет ответ обратно в интерфейс. Я нашел разные решения, используя разные декораторы django rest, но когда я отправляю post-запрос, я получаю ошибку 500.

serializers.py:

 class UserSerializer(serializers.ModelSerializer):        
    class Meta:
        model = User
        fields = '__all__'
 

views.py:

 class UserViewSet(viewsets.ModelViewSet):
    serializer_class = UserSerializer
    queryset = User.objects.all()
 

И мой js-файл, куда я отправляю post-запрос:

 const register = () => {
        Axios.post('http://localhost:8000/api/users/', {
            login: loginReg,
            password: passwordReg,
        }).then((response) => {
            console.log(response);
        })
    }
 

РЕДАКТИРОВАТЬ: приведенный ниже код в serializers.py выдает эту ошибку:

 class UserSerializer(serializers.ModelSerializer):
    records = RecordSerializer(read_only=True, many=True)     
    def create(self, validated_data):
        if User.objects.filter(**validated_data).exists():
            raise Exception('User already exists')
            return User.objects.create(**validated_data)
 

Комментарии:

1. 500 ошибок подразумевает сбой сервера — не могли бы вы опубликовать ошибку?

2. POST localhost:8000 / api / users 500 (внутренняя ошибка сервера) Не обнаружен (в обещании) Ошибка: Ошибка запроса с кодом состояния 500 при createError (createError.js:16) при settle (settle.js:17) при XMLHttpRequest.handleLoad (xhr.js:62)

3. Это похоже на ошибку интерфейса — можете ли вы указать ошибку, выданную в выводе веб-сервера django?

4. Это не ошибка интерфейса, потому что без проверки существующего пользователя с тем же логином все работает нормально. Вывод сервера: ошибка утверждения: create() не вернул экземпляр объекта.

5. @10k20 Я согласен, что это не ошибка интерфейса. Однако вы предоставили интерфейсные ошибки вместо серверной ошибки, исходящей с сервера.

Ответ №1:

В соответствии с условием, которое вы сказали: вы создаете объект user, если предоставленный объект не существует (поправьте меня, если я ошибаюсь)

В этом случае метод create должен быть логически вне условия if, в котором вы проверяете, существует ли пользовательский объект:

 class UserSerializer(serializers.ModelSerializer):
    records = RecordSerializer(read_only=True, many=True)     
    def create(self, validated_data):
        if User.objects.filter(**validated_data).exists():
            raise Exception('User already exists')
        return User.objects.create(**validated_data)