본문 바로가기

web/Django_rest_framework

9. href

이번 시간에는 rest api 생성시 중요한!!(이라 쓰고 항상 까먹는 부분인..) 참조 url을 만들어보겠습니다.

각 인스턴스마다의 detail url / update url / delete url 를 만들어보겠습니다.




1. post/api/serializers.py에 list 용 시리얼라이져를 따로 만들어줍니다. 

    Meta의 fields 부분을 보면 url이 추가된것을 볼수 있습니다. 


    이때 url은 serializers의 HyperlinkedIdentityField를 씁니다.

    여기서 view_name은 현재 각 urls.py에 쓰였던 name을 써주면 알아서 url을 만들어줍니다. 


   여기서 쓰인 posts-api는 /django-rest-api/urls.py에 쓰인 /api/posts/가 입니다.

   그리고 뒤에 detail 은 /post/api/urls.py 에 있는 /<포스트아이디>/ 가 됩니다. 

   lookup_field 부분은 detail 에 있일 pk부분을 명시해줍니다.


   결국 url 부분은 위의 둘의 url을 알아서 합쳐서 보여줍니다. 


from rest_framework.serializers import ModelSerializer, HyperlinkedIdentityField

class PostListSerializer(ModelSerializer):
url = HyperlinkedIdentityField(
view_name='posts-api:detail',
lookup_field='pk'
)

class Meta:
model = Post
fields = [
'pk',
'user',
'title',
'content',
'created_at',
'url',
]



2. serializer를 새롭게 정의하였으니 post/api/view.py의 PostListAPIView()부분의 시리얼라이져를 위에서 선언한 PostListSerializer()로 변경해 줍니다.


from post.api.serializers import PostSerializer, PostListSerializer


class PostListAPIView(ListAPIView):
serializer_class = PostListSerializer
filter_backends = [SearchFilter, OrderingFilter]
search_fields = ['title', 'content']
pagination_class = PostLimitOffsetPagination


3. 이제 /api/posts/화면에서 확인해 보면 리스트에 url부분이 작성되어 리턴된것을 확인 할수 있습니다.




4. post/api/serializers.py 에 update / delete  url을 추가해줍니다.

from rest_framework.serializers import ModelSerializer, HyperlinkedIdentityField

class PostListSerializer(ModelSerializer):
url = HyperlinkedIdentityField(
view_name='posts-api:detail',
lookup_field='pk'
)

delete_url = HyperlinkedIdentityField(
view_name='posts-api:delete',
lookup_field='pk'
)

update_url = HyperlinkedIdentityField(
view_name='posts-api:update',
lookup_field='pk'
)

class Meta:
model = Post
fields = [
'pk',
'user',
'title',
'content',
'created_at',
'url',
'update_url',
'delete_url'
]


5. 다시 /api/posts/로 확인해 보시면 데이터 별로 update/delete url이 추가 된것을 확인 하실수 있습니다.





'web > Django_rest_framework' 카테고리의 다른 글

django에서 swagger로 한다면 drf_yasg 는 왠만하면....  (0) 2019.05.20
django REST_FRAMEWORK login  (0) 2019.01.11
8 pagination  (0) 2016.07.29
7 search  (0) 2016.07.28
6 저장/수정시 유저 저장  (0) 2016.07.27