당신은 멋쟁이, 우리는 장고쟁이~

0%

DRF Tutorial 19편 - 모델에 정보 추가하기

Adding information to our model


우리는, 우리의 Snippet 모델 클래스에, 몇가지 수정사항을 만들겁니다.


우선, 몇가지 필드들을 추가 합시다. 추가할 필드중 하나는, 누가 코드 스니펫을 생성했는가를 표시하기 위해서 사용될것입니다. 또다른 필드는, 하이라이트 된 코드의 HTML 을 저장하는데에 쓰입니다.


  1. 스니펫 생성자 owner 필드
  2. 하이라이트 된 코드의 HTML 텍스트

아래 두가지 필드들을 snippets/models.py 에 있는 Snippet 모델에 추가해 줍니다.


1
2
owner = models.ForeignKey('auth.User', related_name='snippets', 		 on_delete=models.CASCADE)
highlighted = models.TextField()

모델이 저장될때, 또한가지 확실시 해야 하는것은, 코드를 하이라이트 해주는 라이브러리인 pygments 를 사용하여 highlighted 필드를 채워주는것입니다.


몇가지 불러오기를 해줄 필요가 있습니다.


1
2
3
from pygments.lexers import get_lexer_by_name 
from pygments.formatters.html import HtmlFormatter
from pygments import highlight

그리고 이제, 우리는 .save() 메서드를 우리의 모델 클래스에 추가해줄수 있습니다.


1
2
3
4
5
6
7
8
9
10
def save(self, *args, **kwargs):
"""
Use the 'pygments' library to create a highlighted HTML representation of the code snippet.
"""
lexer = get_lexer_by_name(self.language)
linenos = 'table' if self.linenos else False
options = {'title': self.title} if self.title else {}
formatter = HtmlFormatter(style=self.style, linenos=linenos, full=True, **options)
self.highlighted = highlight(self.code, lexer, formatter)
super(Snippet, self).save(*args, **kwargs)

이것이 모두 완료가 되면, 우리는 우리의 데이터베이스 테이블들을 업데이트 해줄 필요가 있을것입니다.


이를 해주기 위해서, 일번적으로 우리는 database migration 을 생성해 줍니다. 하지만, 이번 튜토리얼의 목적을 위해, database 를 삭제하고 다시 시작합시다.


터미널에서 아래 명령어를 실행 합니다.


1
2
3
4
rm -f db.sqlite3 
rm -f snipepts/migrations
python manage.py makemigraitons snippets
python manage.py migrate

또한 여러분들은 API 테스팅 사용을 위한, 여러명의 다른 사용자들을 생성하고 싶을지 모릅니다.


이를 위해 가장 빠른 방법은 createsuperuser 커맨드를 사용하는것입니다.


1
python manage.py createsuperuser