일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 숫자형식오류
- 자바
- R1C3
- 자바 오류
- DoitSQL
- 우아한테크
- 크롤링 오류
- html
- 웹브라우저 수용도
- 생성자
- DoIt
- dbms
- Doit입문SQL
- HTML역사
- 크롤링
- 배열 예제
- SQL
- 키-값 데이터베이스
- 데이터베이스
- 페이지분석
- SQL입문
- 웹 브라우저 전쟁
- DoitSQL입문
- 예제
- 예외
- 숫자 형식
- 배열 3요소
- 함수 선언
- 자바 예외
- 함수
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 |
Tags
- 숫자형식오류
- 자바
- R1C3
- 자바 오류
- DoitSQL
- 우아한테크
- 크롤링 오류
- html
- 웹브라우저 수용도
- 생성자
- DoIt
- dbms
- Doit입문SQL
- HTML역사
- 크롤링
- 배열 예제
- SQL
- 키-값 데이터베이스
- 데이터베이스
- 페이지분석
- SQL입문
- 웹 브라우저 전쟁
- DoitSQL입문
- 예제
- 예외
- 숫자 형식
- 배열 3요소
- 함수 선언
- 자바 예외
- 함수
Archives
- Today
- Total
프로그래밍
[DRF] QueryDict과 Class Dict(feat. HTTP 메서드) 본문
728x90
반응형
2024.12.17.화
Dictionary?
이름을 얼핏 들으면 "둘 다 같은 딕셔너리 아닌가?" 라고 생각할 수 있다
다만 둘의 사용 맥락과 특징은 다르니
특히 REST API를 사용하는 DRF에서는 차이점을 알아두는 것이 좋다
Class Dict
일반적인 Python의 dict 객체이다
key-value 쌍으로 데이터를 저장한다
※ 값에 리스트를 명시적으로 지정하지 않으면 단일 값만 저장한다(여러 값을 저장하려면 수동으로 리스트를 생성 )
사용 맥락
- Django 모델에서 데이터를 다룰 때, 모델 인스턴스의 __dict__ 속성을 통해 필드 값에 접근 가능
- Python 전반에서 데이터 저장, 처리 등에 사용
더보기
__dict__란?
- Python 객체의 __dict__는 객체의 속성을 저장하는 사전(dict)이다
- 객체가 가진 모든 속성과 그 값들을 key-value 쌍으로 저장함
- 일반적으로 사용자 정의 클래스나 Django 모델에서도 이 속성이 존재하며, 객체 내부 데이터를 확인하거나 조작할 때 사용 가능 함
특징
- 변경 가능: 자유롭게 값을 추가, 삭제, 수정 가능
- 직접 접근 가능: 키를 통해 데이터를 바로 접근하거나 수정 가능
예제
# 일반 dict 예제
data = {"key1": "value1", "key2": "value2"}
print(data["key1"]) # 출력: value1
data["key3"] = "value3" # 값 추가
Query Dict
Django에서 사용되는 특별한 dict 형태이다
HTTP 요청(request)의 데이터를 다룰 때 주로 사용한다
QueryDict는 내부적으로 MultiValueDict 구조를 사용하여 키에 여러 값을 리스트 형태로 저장
출력 시 QueryDict 객체라는 정보와 함께 각 키에 대해 항상 리스트 형태로 값이 저장되어 있는 것을 알 수 있다
※ Django의 QueryDict 클래스는 django.http.QueryDict에 정의되어 있음
사용 맥락
- request.GET 또는 request.POST와 같은 요청 데이터를 처리할 때 사용
- 주로 웹 폼 데이터나 URL 쿼리 매개변수를 다룰 때 사용
특징
- Immutable (읽기 전용): 기본적으로 변경 불가하며 데이터를 수정하려면 mutable 속성을 True로 설정해야 함
- 다중 값 지원: 하나의 키에 대해 여러 값을 저장 가능 이를 위해 getlist() 메서드를 제공
예제
from django.http import QueryDict
# QueryDict 예제
qd = QueryDict("key1=value1&key2=value2&key1=value3")
print(qd["key1"]) # 출력: value1 (첫 번째 값 반환)
print(qd.getlist("key1")) # 출력: ['value1', 'value3'] (모든 값 반환)
# 데이터를 수정하려면 mutable 속성 사용
qd = qd.copy() # 기존 QueryDict는 immutable이므로 복사본 생성
qd["key3"] = "value4"
print(qd) # 출력: QueryDict('key1=value1&key1=value3&key2=value2&key3=value4')
사용 예제
# QueryDict의 단일 값 접근
print(query_dict.get('key1')) # 'value1' (첫 번째 값 반환)
print(query_dict.get('key2')) # 'value2' (첫 번째 값 반환)
# Python Dictionary의 값 접근
print(python_dict['key1']) # 'value1'
print(python_dict['key2']) # ['value2', 'value3'] (리스트 전체 반환)
QueryDict 출력:
<QueryDict: {'key1': ['value1'], 'key2': ['value2', 'value3']}>
QueryDict 내부 구조 (getlist 사용):
['value2', 'value3']
Python Dictionary 출력:
{'key1': 'value1', 'key2': ['value2', 'value3']}
필요한 경우 QueryDict ↔ Class Dict을 양방향으로 변환 가능하다
QueryDict → Class Dict 변환
data = dict(request.GET) # 딕셔너리로 변환
# 딕셔너리로 복사하는 방식으로도 활용 가능
data = request.data.copy()
Class Dict → QueryDict 변환
from django.http import QueryDict
qd = QueryDict('', mutable=True)
qd.update({"key1": "value1", "key2": "value2"})
728x90
반응형
'Python > Django REST Framework' 카테고리의 다른 글
[DRF] QuerySet과 Instance(error. AttributeError: 'NoneType' object has no attribute 'exists') (1) | 2024.12.19 |
---|---|
[DRF] From Data로 Boolean 타입 받기(feat. Serializer) (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