[DRF : ] tutorial 1

이유진·2022년 2월 19일
0
  1. snippets.models.py

from pygments.lexers import get_all_lexers

LEXERS = [item for item in get_all_lexers() if item[1]]
  • get_all_lexers()의 결과값 : 순회 가능한 LEXER(언어)들의 정보들이 튜플로 구성되어 있음
('ABAP', ('abap',), ('*.abap', '*.ABAP'), ('text/x-abap',))
('AMDGPU', ('amdgpu',), ('*.isa',), ())
('APL', ('apl',), ('*.apl', '*.aplf', '*.aplo', '*.apln', '*.aplc', '*.apli', '*.dyalog'), ())
........
........
('Zephir', ('zephir',), ('*.zep',), ())
('Zig', ('zig',), ('*.zig',), ('text/zig',))
('ANSYS parametric design language', ('ansys', 'apdl'), ('*.ans',), ())
  • get_all_styles()의 결과값 : 순회 가능한 style 들의 정보들이 담겨 있음
default
emacs
friendly
friendly_grayscale
........
........
gruvbox-light
dracula
one-dark
lilypond

  1. snippets.serializers.py
# 직렬화 & 역직렬화 방법 제공하기
from rest_framework import serializers
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES

# Serializer class 사용
class SnippetSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    title = serializers.CharField(required=False, allow_blank=True, max_length=100)
    code = serializers.CharField(style={'base_template': 'textarea.html'})
    linenos = serializers.BooleanField(required=False)
    language = serializers.ChoiceField(choices=LANGUAGE_CHOICES, default='python')
    style = serializers.ChoiceField(choices=STYLE_CHOICES, default='friendly')

    def create(self, validated_data):
        """
        Create and return a new `Snippet` instance, given the validated data.
        """
        return Snippet.objects.create(**validated_data)

    def update(self, instance, validated_data):
        """
        Update and return an existing `Snippet` instance, given the validated data.
        """
        instance.title = validated_data.get('title', instance.title)
        instance.code = validated_data.get('code', instance.code)
        instance.linenos = validated_data.get('linenos', instance.linenos)
        instance.language = validated_data.get('language', instance.language)
        instance.style = validated_data.get('style', instance.style)
        instance.save()
        return instance
# ModelSerializer class 사용 -> 직렬 변환기 클래스를 생성하기 위한 클래스
class SnippetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Snippet 
        fields = ['id', 'title', 'code', 'linenos', 'language', 'style'] # Snippet 모델의 필드명

Serializer -> ModelSerializer class 변경


serializer가 무얼하는지...정확히 모르겠네..

profile
차근차근 배워나가는 주니어 개발자

0개의 댓글