개인과제 중 jwt토큰을 이용해 로그인하고, 그 회원정보를 수정하는 코드를 짜는데 머리가 매우 지끈거렸다..

너무나 많은 시행착오를 겪었는데.. 기록을 못해서 기억이 나지 않는다..

시행과정

users.urls
...
urlpatterns = [
...
    path('detail/', views.UserDetail.as_view(), name='detail')
...
]

url을 연결시켜 준다.

users.views
...
class UserDetail(APIView):
    def put(self, request):
        user_id = get_object_or_404(User, email=request.data["email"]) # models.User를 인자로 가져오고, request.data의 "email"을 email로 지정,     # 값이 없으면 404오류표시
        user_id.set_password(request.data["password"]) # 여기가 삽질 엄청 하다가 찾아낸 부분. 해시될 비밀번호는 request한 "password"여야 함.. 당연한데 왜 자꾸 여기서 직접 지정하려고 했을까..
        data = {"email": request.data["email"], "password": user_id.password, "username": request.data["username"],"gender": request.data["gender"] ,"age": request.data["age"], "introduction": request.data["introduction"]} # data라는 변수로 회원정보 딕셔너리를 만들었다. 이유는 아래 data=data부분때문에!
        serializer = UserDetailSerializer(user_id, data=data) # data=data를 data=request.data로 했었다. 그 때는 data dic를 해주지 않아서 request.data를 집어넣었는데, 결론적으로 set_password를 해놓고 다시 request.data의 password를 저장해버리니 바뀔리가 있나..
        print("데이터", request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({"message":"수정완료."})
        else:
            return Response({"message":f"${serializer.errors}"}, status=status.HTTP_400_BAD_REQUEST)
...

주석으로 설명을 대신한다.

느낀점

진짜 머리가 아파야 공부한 것 같다!
근데 지식이 안 남고 공부했다는 느낌만 남아서 문제..!
녹음이라도 하고 다녀야겠다.
가보자고!!

profile
가보자고

0개의 댓글

관련 채용 정보