일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
Tags
- java #자바
- 파이썬
- 백준
- react #리액트 #동빈나
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- 다익스트라
- DFS
- 프로그래머스
- react #리액트 #동빈나 #나동빈 #유튜브강의
- 재귀
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- css #생활코딩 #웹
- java #자바 #나동빈
- 알고리즘
- 다이나믹프로그래밍
- PYTHON
- Dijkstra
- 투포인터
- 자바 #java
- 파이썬 #백준 #알고리즘 #코딩테스트
- 백트랙킹
- java #자바 #동빈나
- 백준 #파이썬 #알고리즘 #코딩테스트
- 코딩테스트
- java #자바 #생활코딩
- 백준 #알고리즘 #파이썬 #코딩테스트
- css #웹 #생활코딩
- dp
- BFS
Archives
- Today
- Total
커리까지
[Django REST framework] 1. Serialization 시작 본문
728x90
SMALL
프로젝트 구조
프로젝트 이름 | app 이름 |
---|---|
restapi | appapi |
설치하기
- 공식 사이트에 나와있는 설명서를 참고하여 설치
pip install django
pip install djangorestframework
pip install pygments # We'll be using this for the code highlighting
- pygments는 코드 강조기능
App 추가하기
restapi > restapi > settings.py
- INSTALLED_APPS에
rest_framework
,appapi
를 추가한다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# install app
'rest_framework',
'appapi',
]
모델 생성
restapi > appapi > models.py
from django.db import models
from pygments.lexers import get_all_lexers
from pygments.styles import get_all_styles
# Create your models here.
LEXERS = [item for item in get_all_lexers() if item[1]]
LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS])
STYLE_CHOICES = sorted([(item, item) for item in get_all_styles()])
class BaseModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Snippet(BaseModel):
title = models.CharField(max_length=100, blank=True, default='')
code = models.TextField()
linenos = models.BooleanField(default=False)
language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)
class Meta:
ordering = ['created_at']
- BaseModel을 하나 만들고 상속하면 모델을 생성할 때마다 생성 시간과 업데이트 시간을 계속 작성할 필요가 없다.
-
auto_now_add auto_now 시간을 최초 생성시에만 기입 시간을 계속 갱신하여 장고 모델이 저장될때마다 현재 날짜로 갱신
-
- 모델에서 blank와 null
- 모두 필드(열) 에서 동작
-
blank (유효성과 관련) null (DB와 관련) 장고에서 폼 NULL의 허용 여부 데이터베이스에서 필드(열) NULL의 허용 여부 - 장고에서는 null 대신 빈 문자열('')로 저장된다.
마이그레이션
python manage.py makemigrations snippets
python manage.py migrate snippets
Serializer 생성
restapi > appapi > serializers.py
from rest_framework import serializers
from .models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES
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):
return Snippet.objects.create(**validated_data)
def update(self, instance, 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
- instance는 update 할 객체가 들어왔다고 보면 된다.
**
를 사용하면 dict를 언팩킹 할 수 있다.- foo함수에서 x,y를 인자로 받는다고 설정하였으니 해당되는 키값을 찾아서 매칭시켜준다.
-
def foo(x, y): print(x, y) def xy(): foodict = {'x': '엑스', 'y': '와이'} foo(**foodict) xy() > 엑스 와이
- 키 값을 c,d로 설정하면 오류가 난다.
-
def foo(x, y): print(x, y) def xy(): foodict = {'c': '엑스', 'd': '와이'} foo(**foodict) xy() > TypeError: foo() got an unexpected keyword argument 'c'
실행해보기
shell에서 확인하기
- shell을 먼저 실행한다.
python manage.py shell
- 아래 내용을 cmd 창에 복사, 붙여넣기 한다.
from appapi.models import Snippet
from appapi.serializers import SnippetSerializer
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
snippet = Snippet(code='foo = "bar"\n')
snippet.save()
snippet = Snippet(code='print("hello, world")\n')
snippet.save()
- 인스턴스를 확인해본다.
serializer = SnippetSerializer(snippet)
serializer.data
{'id': 4, 'title': '', 'code': 'print("hello, world")\n', 'linenos': False, 'language': 'python', 'style': 'friendly'}
- many=True를 하면 다수의 데이터 셋을 볼 수 있다.
serializer = SnippetSerializer(Snippet.objects.all(), many=True)
serializer.data
[OrderedDict([('id', 1), ('title', ''), ('code', 'foo = "bar"\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')]), OrderedDict([('id', 2), ('title', ''), ('code', 'print("hello, world")\n'), ('linenos', False)
, ('language', 'python'), ('style', 'friendly')]), OrderedDict([('id', 3), ('title', ''), ('code', 'foo = "bar"\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')]), OrderedDict([('id', 4), ('title', ''), ('cod
e', 'print("hello, world")\n'), ('linenos', False), ('language', 'python'), ('style', 'friendly')])]
https://www.django-rest-framework.org/tutorial/1-serialization/
728x90
LIST
'django' 카테고리의 다른 글
[Django REST framework] 2. Response objects (0) | 2022.02.27 |
---|---|
[Django REST framework] 1-1. View와 Serializer 연결하기 (0) | 2022.02.26 |
[django, 장고] 장고 form checkbox 값 여러개 받기 (0) | 2021.07.10 |
[django] DB에서 테이블 삭제 후 남은 용량 삭제 (0) | 2021.03.25 |
[django] 장고 DB sqlite3 table 상위 10개 데이터 지우기 (0) | 2021.03.25 |
Comments