Почему повышение сериализаторов.ValidationError() вызывает UnicodeDecodeError?Python

Программы на Python
Anonymous
Почему повышение сериализаторов.ValidationError() вызывает UnicodeDecodeError?

Сообщение Anonymous »

Я создаю API для отдыха django (с ImageField), и он работает нормально. Но я хочу добавить некоторые проверки в некоторые поля CharFields. Я заметил некоторую ошибку unicodeDecoderError при добавлении валидатора или просто при возникновении ошибки проверки. Потратил довольно много времени, пытаясь решить эту проблему. Любая помощь будет оценена по достоинству.
Вот мой файл seriesizers.py
from rest_framework import serializers
from .models import *

def validate_phone(phone_number: str):
print(phone_number)
if not (phone_number.startswith(("6", "7", "8", "9"))):
raise serializers.ValidationError(
{"phone": "phone number must startwith digits from 6-9 !!!"})

if not phone_number.isnumeric():
raise serializers.ValidationError(
{"phone": "phone number should contain digits only !!!"})

if len(phone_number) != 10:
raise serializers.ValidationError(
{"phone": "phone number must contain only 10 digits !!!"})

class StudentSerializer(serializers.ModelSerializer):
start_date = serializers.DateField(format='%d %B %Y')
phone = serializers.CharField(max_length=10, validators=[validate_phone])
class Meta:
model = Student
fields = '__all__'

Вызов ошибки проверки приводит к ошибке UnicodeDecoderError. В остальном все работает нормально.
Это мой файл models.py
from django.db import models

class Student(models.Model):
...
phone = models.CharField(max_length=10)
...
start_date = models.DateField()
profile_picture = models.ImageField(upload_to='profile/', blank=True)
...

views.py
class CreateStudent(APIView):
def get(self, request):
students = Student.objects.all()
serializer = StudentSerializer(students, many=True)
return Response({"data": serializer.data}, status=status.HTTP_200_OK)

def post(self, request):
data = request.data
print(data)
serializer = StudentSerializer(data = data)

if serializer.is_valid():
print("\nThis record is valid.")
new_student = serializer.save()
print(new_student.id)
return Response({"message": "Data saved Successfully.", "data": serializer.data, "errors": serializer.errors})
return Response({"message": "Invalid Data", "data": serializer.data, "errors": serializer.errors})

Я отправляю данные с помощью API выборки JavaScript с помощью FormData(), который обрабатывает форматирование и кодирование файла.
Вот файл JavaScript:< /p>
const form = document.querySelector("form");
form.addEventListener("submit", (e) => {
e.preventDefault();

const formdata = new FormData(form);
const json_data = Object.fromEntries(formdata);
console.log(json_data);

const requestOptions = {
method: 'POST',
body: formdata,
};

fetch("http://127.0.0.1:8000/api/join/", requestOptions)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error))

Чувство беспомощности. Без возникновения ValidationError все работает нормально, я просто хочу добавить несколько проверок без каких-либо UnicodeDecodeError. Я попробовал проверить с почтальоном, результат тот же. Я не знаю, как действовать.
Где я упустил
вот полная трассировка:
[05/Jul/2024 08:31:03] "POST /api/join/ HTTP/1.1" 200 316
Internal Server Error: /api/join/
Traceback (most recent call last):
File "C:\Users\lokes\Desktop\Dambaruu\Tasks\Week-7\.api\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request)
File "C:\Users\lokes\Desktop\Dambaruu\Tasks\Week-7\.api\lib\site-packages\django\core\handlers\base.py", line 220, in _get_response
response = response.render()
File "C:\Users\lokes\Desktop\Dambaruu\Tasks\Week-7\.api\lib\site-packages\django\template\response.py", line 114, in render
self.content = self.rendered_content
File "C:\Users\lokes\Desktop\Dambaruu\Tasks\Week-7\.api\lib\site-packages\rest_framework\response.py", line 74, in rendered_content
ret = renderer.render(self.data, accepted_media_type, context)
File "C:\Users\lokes\Desktop\Dambaruu\Tasks\Week-7\.api\lib\site-packages\rest_framework\renderers.py", line 100, in render
ret = json.dumps(
File "C:\Users\lokes\Desktop\Dambaruu\Tasks\Week-7\.api\lib\site-packages\rest_framework\utils\json.py", line 25, in dumps
return json.dumps(*args, **kwargs)
File "C:\Users\lokes\AppData\Local\Programs\Python\Python310\lib\json\__init__.py", line 238, in dumps
**kw).encode(obj)
File "C:\Users\lokes\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\lokes\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Users\lokes\Desktop\Dambaruu\Tasks\Week-7\.api\lib\site-packages\rest_framework\utils\encoders.py", line 52, in default
return obj.decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte


Подробнее здесь: https://stackoverflow.com/questions/787 ... ecodeerror

Вернуться в «Python»