[컴][웹] Django REST framework 에서 Router 사용시 namespace 설정

장고 REST framework 네임스페이스 설정


Routers 의 namespace 설정

Routers 를 include 에 사용할 때 namespace 를 지정할 일이 생긴다.
그러면 serializer 에서 사용하고 있는 field 의 view_name 에도 namespace 를 추가 해 줘야 한다.
  • '<namespace>:<url>'
  • 예: api:user-detail


view_name 설정

view_name 을 설정해 주는 방법은 아래의 글들을 참고하자.



Example

아래는 namespace 를 지정할 때에 대한 예시다.


# myapp2/serializers.py
from django.contrib.auth.models import User, Group
from rest_framework import serializers

class UserSerializer(serializers.HyperlinkedModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name = 'myapp2:user-detail')
    
    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'groups')


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ('url', 'name')




# myapp/urls.py
from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    
    url(r'^api/',
        include('myapp2.urls', namespace = 'myapp2')),


    url(r'^admin/', include(admin.site.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace = 'rest_framework')),
]


# myapp2/urls.py
from django.conf.urls import include, url

from rest_framework import routers

from .views import UserViewSet, GroupViewSet


# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
router.register(r'groups', GroupViewSet)



urlpatterns = [
    url(r'^', include(router.urls), name='router'),

]






댓글 없음:

댓글 쓰기