■ 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()해준다.
반응형
'DEV > Web 개발' 카테고리의 다른 글
Web 개발 :: DRF 리뷰, 파이썬 and와 &의 차이 _TIL#51 (0) | 2022.11.16 |
---|---|
Web 개발 :: DRF 리뷰 _TIL#50 (0) | 2022.11.15 |
Web 개발 :: AWS 인스턴스에 도커(Docker) 셋팅 _TIL#48 (1) | 2022.11.11 |
Web 개발 :: Django DRF Test Code 활용하기 (1) | 2022.11.09 |
Web 개발 :: 프로젝트 완료 및 KPT 회고록 (0) | 2022.11.08 |
댓글