현재까지 작성한 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)
모든 것이 끝나면 데이터베이스의 테이블을 업데이트 해주어야 한다.