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 |