Отправка пользовательской ошибки через API для отображения во flutter
У меня есть функционирующий фронт flutter для регистрации пользователей, который потребляет API Django-rest-framework. С 3 полями (Username, Email и Password). Я пытаюсь добавить закусочную, которая появляется, когда пользователь заполняет поле неправильно в соответствии с моими валидациями. Вот что я пробовал :
if (response.statusCode == 200) {
// Request was successful
print('Signup successful!');
// You can perform any other actions here, such as navigating to a new screen
} else {
// Request failed
print('Failed to signup. Error: ${response.statusCode}');
final Map<String, dynamic> errors = jsonDecode(response.body);
String? key = errors.keys.first;
String value = errors[key][0];
print(value);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('$value'),
backgroundColor: Colors.red,
duration: const Duration(seconds: 2),
),
);
}
} catch (error) {
// Handle any exceptions that occur during the API call
print('Error while signing up: $error');
// You can display an error message to the user or perform other error handling actions
}
}
По какой-то причине, когда поле пароля или имя пользователя Неверно, я получаю сообщение : Не удалось зарегистрироваться. Ошибка: 500 Ошибка при регистрации: FormatException: Неожиданный символ (на символе 1). и когда поле электронной почты недействительно, я получаю неправильное сообщение об ошибке (Введите действительный адрес электронной почты). Я все еще новичок и, возможно, делаю это неправильно, но я пытался сделать это, используя валидации, которые я передал с API. Вот функция проверки:
def custom_validation(data):
email = data['email'].strip()
username = data['username'].strip()
password = data['password'].strip()
##
if not email or UserModel.objects.filter(email=email).exists():
raise ValidationError('choose another email')
##
if not password or len(password) < 8:
raise ValidationError('choose another password, min 8 characters')
##
if not username:
raise ValidationError('choose another username')
return data
а вот и вид :
class UserRegister(APIView):
permission_classes = (permissions.AllowAny,)
def post(self, request):
clean_data = custom_validation(request.data)
serializer = UserRegisterSerializer(data=clean_data)
if serializer.is_valid(raise_exception=True):
user = serializer.create(clean_data)
if user:
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(clean_data,status=status.HTTP_400_BAD_REQUEST)
Я планировал использовать clean_data как часть ответа API для восстановления ошибки ValidationError.