Django не обрабатывает полезную нагрузку POST-запроса от axios
У меня есть стек React + Django REST Framework. DRF работает как API, а React как SPA. И я действительно запутался, почему POST запрос не работает. Если требуется дополнительная информация, пожалуйста, спросите меня.
В React
Я делаю POST-запрос с помощью axios следующим образом:
axios
.post(
'/api/auth/register/',
registrationInfo,
{ headers: { "Content-Type": "application/json" } }
)
.then((response) => {
setRegistrationStatus(response.data.status)
})
.catch((error) => { console.log(error) })
Внешняя часть запроса работает нормально. Показаны полезная нагрузка и заголовки: ,
В DRF Мой сериализатор для регистрации выглядит следующим образом:
class RegistrationSerializer(UserSerializer):
password = serializers.CharField(max_length=200, write_only=True, required=True)
email = serializers.EmailField(required=True, write_only=True, max_length=200)
class Meta:
model = CustomUser
fields = ['id', 'email', 'password', 'phone', 'first_name', 'last_name', 'is_active', 'created_at', 'modified_at']
def create(self, validated_data):
try:
user = CustomUser.objects.get(email=validated_data['email'])
except ObjectDoesNotExist:
user = CustomUser.objects.create_user(**validated_data)
return user
... и мнения:
class RegistrationViewSet(viewsets.ModelViewSet, TokenObtainPairView):
serializer_class = RegistrationSerializer
permission_classes = (AllowAny,)
http_method_names = ['post']
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=self.request.query_params)
serializer.is_valid(raise_exception=True)
user = serializer.save()
refresh = RefreshToken.for_user(user)
res = {
"refresh": str(refresh),
"access": str(refresh.access_token),
}
return Response({
"user": serializer.data,
"refresh": res["refresh"],
"token": res["access"]
}, status=status.HTTP_201_CREATED)
Вывод DRF при выполнении запроса сбивает с толку. В developer tools-network ответ {"email":["This field is required."],"password":["This field is required."]}
. А в консоли я имею
Bad Request: /api/auth/register/
[15/Oct/2022 02:00:37] "POST /api/auth/register/ HTTP/1.1" 400 76
Я не уверен, как работает payload в POST-запросах, но управление payload в GET-запросе с помощью axios (который работает для меня) прикрепляет payload к URL, в то время как местоположение payload в POST-запросе сбивает с толку. В postman достигается желаемый результат. Но он кодирует полезную нагрузку по url: