본문 바로가기

내일 배움 캠프/TIL

TIL) 7주차 4일

컨디션이 너무 별로네..

 

어머니는 여전히 병명을 찾지 못하고 계셔서

 

마음이 너무 불편하다..

 

그럼에도 오늘도 화이팅


users/serializers.py 설정

1. serializers.py에서 class Meta 안의 필드를 지정해줄때 __all__이 아니라 하나만 지정해주고 싶을때에도 반드시 ,(콤마)를 붙여주어야 한다. 아래는 예시

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ("content",)

 

2. 회원가입 / 수정에 필요한 함수

처음에 썻던 코드는 아래와 같다.

def create(self, validated_data):
    user = super().create(validated_data)
    password = user.password
    user.set_password(password) # 비밀번호를 해싱을 해서 저장하는 방법
    user.save()
    return user
    
def update(self, validated_data):
    user = super().create(validated_data)
    password = user.password
    user.set_password(password) # 비밀번호를 해싱을 해서 저장하는 방법
    user.save()
    return user

기존 코드를 사용했을때의 문제점은 회원정보를 수정하려고 했을때 계속 오류가 난다는 점이다. update함수의 인자는 2개인데 views.py의 put 함수에는 해당 user의 id값도 넣어야 해서 계속 오류가 났다..  강의에서는 수정도 create 함수와 똑같다라고 나와있어서 계속 저것만 고집을 했는데 찾아보니 serializer에서 update함수는 instance 인자도 추가로 넣어주어야 했다. 그리고 추가로 자동으로 해싱을 해주는 함수도 발견해서 같이 썼다. 

from django.contrib.auth.hashers import make_password

# 회원가입시 비밀번호를 해싱(암호화) 하는 함수
def create(self, validated_data):
    validated_data['password'] = make_password(validated_data['password'])
    return super().create(validated_data)


# 회원 수정시 비밀번호를 해싱 하는 함수
def update(self, instance, validated_data):
    instance.email = validated_data.get('email', instance.email)
    new_password = make_password(validated_data['password'])
    instance.password = new_password
    instance.save()
    return instance

 

3. access_token 발급시 유의점

settings.py에서 받는 access_token과 views.py에서 받는 access_token의 값이 다르다는것을 알게되었다. 이러한 이유에 대해 질문도 했지만 아직 명확한 답이 나오지는 않았다. 아래는 print를 했을때 값이 다른것을 보여주는 예시다.

views.py의 access_token이 전달받은 access_token과 동일하다


 

'내일 배움 캠프 > TIL' 카테고리의 다른 글

TIL) 8주차 1일  (0) 2023.05.02
TIL) 7주차 5일  (0) 2023.05.02
TIL) 7주차 3일  (0) 2023.04.27
TIL) 7주차 2일  (0) 2023.04.26
TIL) 7주차 1일  (0) 2023.04.25