r잡초처럼
바른 프로그래밍
r잡초처럼
전체 방문자
오늘
어제
  • 분류 전체보기 (124)
    • FastAPI (7)
    • 끄적끄적 (2)
    • Python (17)
    • Django (31)
    • Database (2)
    • Docker (7)
    • 디자인패턴 (2)
    • CS 공부 (12)
      • 알고리즘 (2)
      • 자료 구조 (1)
      • 네트워크 (7)
      • IT 지식 (1)
      • 운영체제 (1)
    • 기타 팁들 (10)
    • Aws (2)
    • 독서 (1)
    • 코딩테스트 공부 (1)
      • 백준 (0)
      • 프로그래머스 (1)
    • DevOps (13)
    • TIL (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • validate
  • 6장
  • 상속과 컴포지션
  • 책 리뷰
  • 7장
  • 파이썬 클린 코드
  • encoding
  • dotenv
  • 네트워크
  • 5장 회사에서 하는 랜 구성
  • 랜 카드
  • 완벽한 IT 인프라 구축을 위한 Docker
  • pycharm
  • Batch
  • 전기 신호
  • query param
  • 케이블의 종류
  • poetry
  • CS 지식
  • 상속 안티 패턴
  • preonboarding
  • cp949
  • fastapi
  • 물리 계층
  • 컴퓨터 기본 지식
  • depends
  • 모두의 네트워크
  • docker
  • 랜과 왠
  • pytest

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
r잡초처럼

바른 프로그래밍

Django

[DRF - Django Rest Framework] Serializer Field 톺아보기(3)

2022. 12. 13. 20:42

오늘은 Composite Fields를 살펴보겠다.

 

Composite Fields

1.1 ListField

개체 리스트의 유효성을 검사하는 필드 클래스이다. 이해한 바로는 List를 반환해주고 그 안의 개체들이 선언한 필드인지 아닌지 유효성 검사를 한다. 

인수는 다음과 같다

  • child - 목록에서 개체의 유효성을 검사하는 데 사용되는 필드 인스턴스이다. 설정하지 않으면 개체의 유효성이 검사되지 않는다.
  • allow_empty - 말 그대로 빈 리스트를 허용할지 말지를 설정한다.
  • min_length - 최소 개수를 설정한다.
  • max_length - 최대 개수를 설정한다.

코드를 살펴보자. 예제는 해당 사이트에서 가져왔다.

# import serializer from rest_framework
from rest_framework import serializers
 
class Geeks(object):
    def __init__(self, integers):
        self.integers = integers
 
# create a serializer
class GeeksSerializer(serializers.Serializer):
    # initialize fields
    integers = serializers.ListField(
    	child = serializers.IntegerField(min_value = 0, max_value = 100)
   	)

그리고 나서 python 가상 환경에 접근해서 사용해보자

>>> obj = Geeks([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> serializer = GeeksSerializer(obj)
>>> serializer.data
{'integers': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}

만약 이때 문자열이 들어간다면 오류를 뱉는다.

>>> obj = Geeks([1, 'aaa'])
>>> serializer = GeeksSerializer(obj)
>>> serializer.data
....
ValueError: invalid literal for int() with base 10: 'aaa'

1.2 DictField

ListField와 유사하다. DIctField의 키는 항상 문자열 값으로 가정한다.

인수는 다음과 같다

  • child - dict의 유효성을 검사하는 데 사용되는 필드 인스턴스이다. 설정하지 않으면 개체의 유효성이 검사되지 않는다.
  • allow_empty - 말 그대로 빈 리스트를 허용할지 말지를 설정한다..

아래의 예제로 이해해보자

from rest_framework import serializers
 
class Document(object):
    def __init__(self, document: dict):
        self.document = document
 
# create a serializer
class DocumentSerializer(serializers.Serializer):
    # initialize fields
    document = serializers.DictField(
    child = serializers.CharField())

클래스를 선언한 다음, 아래의 코드를 입력해보자.

>>> document = {'document': {'title': 'awesome'}}
>>> doc = Document(document)
>>> doc_serializer = DocumentSerializer(doc)
>>> doc_serializer.data
{'document': {'document': "{'title': 'awesome'}"}}

또한 다음과 같이 유효성 검사를 할 수도 있다.

>>> doc_serializer = DocumentSerializer(data=document})
>>> doc_serializer.is_valid()
True
>>> doc_serializer.data
{'document': {'title': 'awesome'}}

1.3 HStoreField

장고의 PostGres HStoreField와 호환되는 DIctFIeld이다.

인수는 DictField와 같다.

1.4 JSONFIeld

들어오는 데이터 구조가 유효한 JSON 요소로 구성되어 있는지 확인하는 필드 클래스이다. 바이너리 모드에서는 JSON으로 인코딩된 이진 문자열을 표현하고 검증한다.

인수는 다음과 같다.

  • binary - True로 설정하면 binary 데이터 구조가 아닌 JSON 인코딩 문자열을 출력하고 검증한다. 기본값은 False 이다.
  • encoder - 이 인코더를 사용하여 입력 개체를 직렬화한다. 기본값은 None이다.
from rest_framework import serializers
 
class Geeks(object):
    def __init__(self, json_data):
        self.json_data = json_data
 
# create a serializer
class GeeksSerializer(serializers.Serializer):
    # initialize fields
    json_data = serializers.JSONField()
# create a json object
>>> import json
>>> x = json.dumps({"name":"Naveen", "Age":"21"})
>>> x
'{"name": "Naveen", "Age": "21"}'

# create a object of type Geeks
>>> obj = Geeks(x)

# serialize the object
>>> serializer = GeeksSerializer(obj)

# print serialized data
>>> serializer.data
{'json_data': '{"name": "Naveen", "Age": "21"}'}

다음에는 Miscellaneous Field에 대해 살펴보겠다.


참고

1. https://www.django-rest-framework.org/api-guide/fields/

 

Serializer fields - Django REST framework

 

www.django-rest-framework.org

2. https://www.geeksforgeeks.org/listfield-in-serializers-django-rest-framework/

 

ListField in serializers - Django REST Framework - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

3. https://www.geeksforgeeks.org/dictfield-in-serializers-django-rest-framework/

 

DictField in serializers - Django REST Framework - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

4. https://www.geeksforgeeks.org/jsonfield-in-serializers-django-rest-framework/

 

JSONField in serializers - Django REST Framework - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

'Django' 카테고리의 다른 글

[Pytest] - django-dotenv 와 pytest-dotenv 오류  (0) 2022.12.19
[DRF] - Serializers Class 알아보기(1)  (0) 2022.12.14
Django Queryset - Lazy QuerySet 과 올바른 Caching 사용법  (0) 2022.12.09
[DRF - Django Rest Framework] Serializer Field 톺아보기(2)  (0) 2022.12.07
[DRF - Django Rest Framework] Serializer Field 톺아보기(1)  (0) 2022.11.30
    'Django' 카테고리의 다른 글
    • [Pytest] - django-dotenv 와 pytest-dotenv 오류
    • [DRF] - Serializers Class 알아보기(1)
    • Django Queryset - Lazy QuerySet 과 올바른 Caching 사용법
    • [DRF - Django Rest Framework] Serializer Field 톺아보기(2)
    r잡초처럼
    r잡초처럼
    오늘보다 내일 더 나은 개발자가 되기 위한 노력을 기록하는 블로그 입니다.

    티스토리툴바