본문 바로가기
DEV/Web 개발

Web 개발 :: DRF 리뷰 _TIL#49

by 올커 2022. 11. 14.

■ JITHub 개발일지 49일차

□  TIL(Today I Learned) ::

Django Rest Framework 코드 리뷰

 - 지난 프로젝트에 대한 DRF 코드리뷰를 훑어보는 작업을 진행했다.

 - 유저 부분부터, 게시글, 댓글에 대한 코드를 살펴보았다.

 

 - 아래 코드는 회원정보를 수정하는 view이다. 정보수정시 put방식을 사용하기 때문에 함수 이름도 put으로 지정하였다.

 - 여기서 partial = True는 정보 수정시 모든 정보가 아니라 부분적으로 수정이 가능토록 하기위해 사용되는 옵션이다.

# 회원정보 수정
    def put(self, request):
        user = get_object_or_404(User, id=request.user.id)
        if user == request.user:
            serializer = UserSerializer(user, data=request.data, partial=True)
            ...

 - 비밀번호 해싱처리에 대한 serializer 코드는 아래와 같이 사용했다. 코드를 작성할 때 마다 기억이 나지 않는 것을 보니 코드가 아직 이해가 완벽하게 되지 않은 듯 하다. 

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = "__all__"
        
    # 생성_비밀번호 해싱 처리
    def create(self, validated_data):
        user = super().create(validated_data)       # super를 통해 부모 클래스의 create함수 호출하기
        password = user.password
        user.set_password(password)             # set_password : 패스워드 해싱처리
        user.save()
        return user
        
    
    # 수정
    def update(self, validated_data):
        user = super().create(validated_data)
        user.set_password(password)
        user.save()
        return user

 - super()로 부모 클래스인 ModelSerializer의 create 함수를 호출하고 해당 user 계정에 담을 password를 해싱하기위해 password라는 변수에 담은 후 set_password를 통해 생성한 변수 password를 해싱처리한다

 - set_password는 django에서 제공하고 있는 함수이다. validated_data를 사용하여 user를 계정을 생성하는데 validated_data에는 해싱되지 않은 password가 들어와있다. 그렇기 때문에 password를 따로 빼서 해싱처리를 한 password로 user.set_password로 입혀넣는 것이다. 처리가 다 완료되면 마지막에 save()해준다.

 

반응형

댓글