400 잘못된 요청 오류가 발생하는 이유는 무엇입니까? Django Rest 프레임 워크를 백엔드로 사용하고 React를 웹 애플리케이션의 프론트 엔드로 사용

MPagan

openweathermap api를 활용하는 간단한 웹 애플리케이션을 개발 중입니다. api 데이터를 반환하고 사용자가 입력하는 특정 도시의 날씨에 대한 임시 및 설명을 표시하는보기에 대한 api 호출이 있습니다.

아래의 api 호출은 사용자가 선택한 특정 날씨 데이터를 저장할 수있는 새로운 기능에 대한 또 다른 호출입니다. 상태에서 temp 및 desc를 가져 와서 백엔드보기로 보냅니다. 그런 다음 뷰는 해당 데이터를 데이터베이스에 저장하고 동일한 API 호출에서 데이터를 표시하는 데 사용할 응답을 반환합니다. 400 오류가 발생합니다. 콘솔은 temp & desc를 기록했고 둘 다 올바르게 인쇄되므로 정의되지 않은 데이터를 백엔드로 보내지 않습니다. 데이터를 직렬화하는 방식 일 수 있습니까?

프런트 엔드 API 호출

const saveWeather = (temperature, description) => {
     const requestOptions = {
          method: "POST",
          headers: { "Content-Type": "application/json"},
          body: JSON.stringify({
            temperature: temperature,
            description: description
          })
        };
    
    fetch("/api/savedweather", requestOptions)
      .then((response) => {
        if (response.ok) {
          console.log("OK");
        }
      })
      .catch((error) => {
        console.log(error);
      });
  }

전망

class SaveWeather(APIView):
serializer_class = WeatherSerializer

def post(self, request, format=None):
    serializer = self.serializer_class(data=request.data)

    if serializer.is_valid():
        temperature = serializer.data.get('temperature')
        description = serializer.data.get('description')
        weather = Weather(temperature=temperature, description=description)
        weather.save()
        return Response(WeatherSerializer(weather).data, status=status.HTTP_201_CREATED)
    
    return Response({'Bad Request': "Invalid Data..."}, status=status.HTTP_400_BAD_REQUEST)

모델

from django.db import models

class Weather(models.Model):
    temperature = models.IntegerField(null=False, default=1)
    description = models.CharField(max_length=50)

직렬 변환기 클래스

from .models import Weather
from rest_framework import serializers 

class WeatherSerializer(serializers.ModelSerializer):
    class Meta: 
        model = Weather
        fields = ('temperature', 'description')
Adithya

모델 및 시리얼 라이저 정의를 모르면 말하기 어렵습니다.

그러나 분명히 serializaer 유효성 검사 오류로 보이므로 serializer가 던진 오류를 serializer.errors필드로 확인할 수 있습니다 .

if serializer.is_valid():
    ...
    return Response(WeatherSerializer(weather).data, status=status.HTTP_201_CREATED)

print(serializer.errors)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관