본문 바로가기
Django/Django Rest Framework

22. Django DRF serializer 심화 / updater

by S.T.Lee 2022. 6. 22.

serializer를 사용해 기존 데이터들 쉽게 업데이트 할 수 있다.

가입된 유저의 정보를 바꾸는걸 해보겠다.

 

#views.py
class UserView(APIView):
    #put과 비교용
    def post(self, request):
        user_serializer = CustomUserSerializer(data=request.data)
        if user_serializer.is_valid():
            user_serializer.save()
            return Response({"message": "정상"}, status=status.HTTP_200_OK)
        return Response(user_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    
    def put(self, request, obj_id):
        #원래 request.user로 받는게 맞음
        user = CustomUserModel.objects.get(id=obj_id)
        #절대 회원정보 수정을 이렇게 하면 안됨
        user_serializer = CustomUserSerializer(user, data=request.data)
        if user_serializer.is_valid():
            user_serializer.save()
            return Response(user_serializer.data, status=200)
        
        return Response(user_serializer.errors, status=400)
#serializer.py
class CustomUserSerializer(serializers.ModelSerializer):
    article_set = ArticleSerializer(many=True, read_only=True)
    comment_set = CommentSerializer(many=True, read_only=True)
    class Meta:
        model = CustomUserModel
        fields = ['username', 'join_date', 'article_set', 'comment_set']
        
        extra_kwargs = {
           'password': {'write_only': True}, # default : False
            'email': {
               'error_messages': {
                    'required': '이메일을 입력해주세요.',
                     'invalid': '알맞은 형식의 이메일을 입력해주세요.'
                    },
                    'required': False # default : True
                    },
            }
#urls.py
urlpatterns = [
    path('login/', views.UserApiView.as_view()),
    path('logout/', views.UserApiView.as_view()),
    path('', views.UserView.as_view()),
    path('<obj_id>/', views.UserView.as_view())
]

 

Tip

1) urls.py에서 <obj_id>부분이 제일 밑으로 가야된다. 만약 위에 있다면 위에서 아래로 읽기 때문에 로그인할때도 <obj_id>가 없다고 뜬다.

2) put과 post의 차이는 user_serializer에서 user를 넣었느냐 아니야의 차이이다.

 

 

'Django > Django Rest Framework' 카테고리의 다른 글

24. DRF JWT 사용하기  (0) 2022.07.18
23. DRF JWT란  (0) 2022.07.18
21. Django DRF serializer 심화 / validator  (0) 2022.06.21
20. Django DRF Q  (0) 2022.06.21
19. Django DRF orm 심화  (0) 2022.06.20