일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- DoitSQL
- 자바
- 함수 선언
- 숫자 형식
- 우아한테크
- 자바 오류
- DoIt
- 숫자형식오류
- 페이지분석
- 자바 예외
- 배열 예제
- 데이터베이스
- R1C3
- Doit입문SQL
- 예제
- 크롤링 오류
- 예외
- DoitSQL입문
- 함수
- 배열 3요소
- 생성자
- 키-값 데이터베이스
- HTML역사
- 웹브라우저 수용도
- 웹 브라우저 전쟁
- SQL
- 크롤링
- dbms
- SQL입문
- html
Archives
- Today
- Total
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- DoitSQL
- 자바
- 함수 선언
- 숫자 형식
- 우아한테크
- 자바 오류
- DoIt
- 숫자형식오류
- 페이지분석
- 자바 예외
- 배열 예제
- 데이터베이스
- R1C3
- Doit입문SQL
- 예제
- 크롤링 오류
- 예외
- DoitSQL입문
- 함수
- 배열 3요소
- 생성자
- 키-값 데이터베이스
- HTML역사
- 웹브라우저 수용도
- 웹 브라우저 전쟁
- SQL
- 크롤링
- dbms
- SQL입문
- html
Archives
- Today
- Total
프로그래밍
[DRF] From Data로 Boolean 타입 받기(feat. Serializer) 본문
Python/Django REST Framework
[DRF] From Data로 Boolean 타입 받기(feat. Serializer)
시케 2024. 12. 18. 15:10728x90
반응형
2024.12.18.수
From Data
Front-end에서 Form Data를 활용하여 Boolean 값을 전송하는 경우
해당 값은 "문자열"로 전달된다
이는 적절히 변환하여 전송해야 한다
JavaScript의 FormData는 문자열 혹은 BLOB으로 처리한다
number나 boolean 등의 값은 처리하지 못하므로
Boolean 값을 직접 문자열로 변환해서 전송해야 한다
// FormData 객체를 사용하는 경우
const formData = new FormData();
formData.append('is_active', 'true'); // Boolean 값을 문자열로 변환
// Axios로 Form Data 전송
import axios from 'axios';
const formData = new FormData();
formData.append('is_active', 'true'); // 'true' 또는 'false'로 전송
axios.post('/api/endpoint/', formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
});
<!-- HTML Form을 사용하는 경우 -->
<form method="POST" action="/api/endpoint/">
<input type="hidden" name="is_active" value="false"> <!-- 기본값 -->
<input type="checkbox" name="is_active" value="true"> <!-- 체크 시 true -->
<button type="submit">Submit</button>
</form>
Server에서 데이터 처리
다행히 Django REST Framework의 BooleanField는 문자열로 전달된 값을 자동으로 변환해준다
True로 처리되는 값
- "true"
- "t"
- "yes"
- "y"
- "on"
- "1"
False로 처리되는 값
- "false"
- "f"
- "no"
- "n"
- "off"
- "0"
- "" (빈 문자열)
위에 언급되지 않은 값이 전달되면 유효성 검사시 오류를 반환한다
DRF에서는 빈 문자열을 False로 처리하며
BooleanField는 기본적으로 None 값을 허용하지 않는다("allow_null=True" 설정 필요)
# 빈 문자열을 허용
is_active = serializers.BooleanField(allow_blank=False)
# None 값 허용
is_active = serializers.BooleanField(allow_null=True)
또한 DRF는 대소문자를 구분하지 않는다
따라서 "TRUE", "False" 등도 올바르게 처리된다
예시
from rest_framework import serializers
class MySerializer(serializers.Serializer):
is_active = serializers.BooleanField()
# 테스트 데이터
test_data = [
"true", "false", "1", "0", "yes", "no", "on", "off", "",
"True", "False", "T", "F", "Y", "N", "Yes", "No", "On", "Off",
"abc", "123", None
]
for value in test_data:
serializer = MySerializer(data={"is_active": value})
if serializer.is_valid():
print(f"Input: {value!r} → Parsed: {serializer.validated_data['is_active']}")
else:
print(f"Input: {value!r} → Error: {serializer.errors}")
출력결과
Input: 'true' → Parsed: True
Input: 'false' → Parsed: False
Input: '1' → Parsed: True
Input: '0' → Parsed: False
Input: 'yes' → Parsed: True
Input: 'no' → Parsed: False
Input: 'on' → Parsed: True
Input: 'off' → Parsed: False
Input: '' → Parsed: False
Input: 'True' → Parsed: True
Input: 'False' → Parsed: False
Input: 'T' → Parsed: True
Input: 'F' → Parsed: False
Input: 'Y' → Parsed: True
Input: 'N' → Parsed: False
Input: 'Yes' → Parsed: True
Input: 'No' → Parsed: False
Input: 'On' → Parsed: True
Input: 'Off' → Parsed: False
Input: 'abc' → Error: {'is_active': [ErrorDetail(string='Not a valid boolean.', code='invalid')]}
Input: '123' → Error: {'is_active': [ErrorDetail(string='Not a valid boolean.', code='invalid')]}
Input: None → Error: {'is_active': [ErrorDetail(string='This field may not be null.', code='null')]}
728x90
반응형
'Python > Django REST Framework' 카테고리의 다른 글
[DRF] QuerySet과 Instance(error. AttributeError: 'NoneType' object has no attribute 'exists') (1) | 2024.12.19 |
---|---|
[DRF] QueryDict과 Class Dict(feat. HTTP 메서드) (0) | 2024.12.18 |
[DRF] View / Model / Serializer 각각 어디까지 처리하는 것이 이상적인가? (0) | 2024.12.16 |
[DRF] status (0) | 2023.11.29 |
[DRF] Response (0) | 2023.11.29 |
Comments