현재까지 작성한 API는 누가 코드를 수정하고, 삭제할 수 있는지에 대한 규제가 전혀 없다. 여기서 사용자는 더욱 심화적인 행동들을 추가할 수 있는데:

모델에 정보 추가하기


이제 Snippet 모델 클래스에 약간의 변화들을 줄 것이다. 첫 번째로 몇 개의 필드들을 추가해 줄 것이다. 그 중 하나의 필드는 어떤 유저가 코드를 생성했는지 명시해줄 것이다. 그리고 다른 하나의 필드는 코드의 하이라이트된 HTML 대표를 저장하는데 사용될 것이다.

아래의 두 필드를 models.py 안에 Snippet 모델에 추가하자.

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

pygments 라이브러리를 사용해서 highlighted field를 작성할 것이기 때문에 Model이 저장되었는지 다시 한번 확인하자.

아래 라이브러리를 import 해주자.

from pygments.lexers          import get_lexer_by_name
from pygments.formatters.html import HtmlFormatter
from pygments                 import highlight

그 다음 모델 클래스에 .save() 메소드를 추가한다.

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)

모든 것이 끝나면 데이터베이스의 테이블을 업데이트 해주어야 한다.