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

0%

DRF Tutorial 20편 - 유저모델을 위한 엔드포인트 추가하기

Adding information to our model


Endpoint 란?

어떠한 소프트웨어나 제품의 최종목적지인 사용자를 가리킴

사전적 의미로는, 연결의 한쪽 끝에 있는 엔티티 (주체)


이제 우리는 작업을 같이 할 몇몇의 사용자가 있습니다. 우리의 API 에 이 사용자들이 표시되게 하는것이 나을것 같습니다. 새로운 serializer 를 생성하는것은 쉽습니다. snippets/serializers.py 파일안에, 아래 내용을 추가해 줍니다.


1
2
3
4
5
6
7
8
from django.contrib.auth.models import User 

class UserSerializer(serializer.ModelSerializer):
snippets = serializers.PrimaryKeyRelatedField(many=True, queryset=Snippet.objects.all())

class Meta:
model = User
fields = ['id', 'username', 'snippets']

Snippets 들은 User 모델에서 역방향 관계에 있기 때문에 ModelSerializer 클래스를 사용할때에 기본값으로 포함되어 있지 않을것입니다. 따라서, 우리는 명시적으로, 필드를 추가해 주어야 합니다.


Snippet Class 에 ForiegnKey 를 사용하여 User 모델에 연결되어 있기 때문에,


하나의 Snippet 객체에서 연결되어 있는 User 객체를 조회할때는 순방향 (Forward) 라고 하고,

하나의 User 객체에서, 연결되어 있는 Snippet 객체를 조회할때는, 역방향 (Backward or Reverse) 라고 합니다. 따라서, snippets 는 User 모델에서 역방향 관계에 있습니다.



또한 우리는 몇가지 views 를 views.py 파일에 추가해 줄것입니다. 읽기 전용 형태로 사용자들에게 표시되게 하고 싶습니다. 따라서 ListAPIViewRetrieveView 제너릭 클래스기반 뷰를 사용할것입니다.


1
2
3
4
5
6
7
8
9
from django.contrib.auth.models import User 

class UserList(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer

class UserDetail(generics.RetireveAPIView):
queryset = User.objects.all()
serialzier_class = UserSerializer

views.py 파일에서 UserSerializer 클래스를 불러오는것을 잊지 말아야 합니다!


1
from snippets.serializers import UserSerializer

마지막으로, 우리는 이 뷰들을 API 안에 추가해줄 필요가 있습니다. URLConf 에서 참조하도록 합시다.


snippets/urls.py 파일에 아래 패턴들을 추가해줍니다.


1
2
path('users/', views.UserList.as_view()), 
path('users/<int:pk>/', views.UserDetail.as_view()),