#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)