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

0%

DRF-Tutorial-29편- 하이라이트된 스니펫에 앤드포인트 생성

Creating an endpoint for the highlighted snippets


우리의 API 코드가 코드 하이라이팅에 앤드포인트를 가지고 있지 않습니다.


우리는 JSON 을 사용하지 않고, HTML 로 표시합니다.


REST FRAMEWORK 에서는, 두가지 스타일의 HTML 렌더러가 제공됩니다.


  1. 템플릿을 사용하여, HTML 을 렌더
  2. 미리 렌더가 된 HTML 을 다루는것

2번째 방식이, 우리가 앤드포인트를 위해 사용하고 싶은것 입니다.


코드 하이라이트 뷰를 생성할때 염두해 두어야 할 또다른 한가지는, 우리가 사용할수 있는 강력한 generic 뷰가 존재하지 않는다는 점입니다. 우리는 객체 인스턴스를 반환하지 않지만, 객체 인스턴스의 속성을 대신 리턴해 줄겁니다.


generic 뷰를 사용하는 대신에, 우리는 인스턴스를 표현하기 위한 베이스 클래스를 사용하고, 우리만의 .get() 메서드를 사용할겁니다.


snippets/views.py 파일을 열고, 아래를 추가해 줍니다.


1
2
3
4
5
6
7
8
9
10
from rest_framework import renderers
from rest_framework.response import Response

class SnipeptHighlight(generics.GenericAPIView):
queryset = Snippet.objects.all()
renderer_classes = [renderes.StaticHTMLRenderer]

def get(self, request, *args, **kwargs):
snippet = self.get_object()
return Response(snippet.highlighted)

평소와 같이 우리는 우리가 생성한 새로운 뷰들을 URLConf 에 추가해 주어야 합니다.


새로운 API root 를 snippets/urls.py 파일안에 urlpatterns 에 추가해 줍니다.


1
path('', views.api_root),

그리고 나서, 스니펫 하이라이트들을 url 패턴에 추가해 줍니다.


1
path('snippets/<int:pk>/highlight/', views.SnippetHighlight.as_view()),