[데이터 엔지니어링 데브코스] TIL 14일차 - 장고 활용한 API서버 만들기(4)

박단이·2023년 11월 3일
0

데브코스 TIL

목록 보기
13/56

오늘 공부한 내용🤓

  1. User & Authentication
    • User는 django.contrib.auth에서 자동으로 생성해주는 테이블
    • shell 에서 불러올 때 from django.contrib.auth.models import User 을 사용한다.
    • 유저의 로그인 상태에 대한 자세한 permission은 따로 블로그로 작성할 예정
## polls_api/serializers.py

from rest_framework import serializers
from polls.models import Question
from django.contrib.auth.models import User

# User 의 Serializer
class UserSerializer(serializers.ModelSerializer):
	#   questions는 user에 속한 것이 아니라 Question에 있기 때문에 따로 생성해줘야 한다.
	#   many=True : 하나의 유저가 여러개의 질문을 가지고 있기 때문에 사용
	questions = serializers.PrimaryKeyRelatedField(many=True, queryset = Question.objects.all())
	
	class Meta:
		model = User
		fields = ['id', 'username', 'questions']

# 회원가입 Serializer
class RegisterSerializer(serializers.ModelSerializer):
	password = serializers.CharField(write_only=True, required=True, validators=[validate_password])
	password2 = serializers.CharField(write_only=True, required=True)
	
	# 비밀번호 확인 절차
	def validate(self, attrs):
		if attrs['password'] != attrs['password2']:
			raise serializers.ValidationError({"password": "두 패스워드가 일치하지 않습니다."})
		return attrs
	
	# password2는 user에 없으므로 자동으로 넣게되면 에러가 남! 꼭 특정해줄 것!
	def create(self, validated_data):
		user = User.objects.create(username=validated_data['username'])
		user.set_password(validated_data['password'])
		user.save()
		
		return user
	
	class Meta:
		model = User
		fields = ['username', 'password','password2']

  1. 상속(Inheritance)과 오버라이딩(Overriding)
    • 자식 클래스가 부모 클래스의 변수와 함수를 그대로 물려받아서 사용할 수 있는 것을 상속이라고 한다.
    • 이 때, 상속받은 함수나 변수를 변경하는 것을 오버라이딩이라고 한다.
    • 속성을 물려주는 클래스를 부모 클래스(Parent Class) 또는 상위 클래스(Super class)라고 지칭하고, 속성을 받는 클래스를 자식 클래스(Child Class) 또는 하위 클래스(Sub Class)라고 한다.
# 부모 클래스
class Student:
    def __init__(self, name):
        self.name = name
    
    def introduce(self):
        return "저는 학생입니다."

# 자식 클래스
class HighSchool(Animal):
	def __init__(self, name, school_name):
    	super().__init__(name) 		# 상속 
        self.school_name = school_name	
        
    # 오버라이딩
    def introduce(self):
        return f"저는 {self.school_name} 고등학교에 다니는 {self.name}입니다."

my_name = HighSchool("박단이", "한국")
print(my_name.name)  # 출력: 박단이
print(my_name.introduce())  # 출력: 저는 한국 고등학교에 다니는 박단이입니다.

궁금한 내용 / 어려운 내용❓

  • User 모델을 커스터마이징 하는 방법
  • 지금까지 배운 내용을 활용하여 간단한 웹사이트를 만들어보고 싶다.
  • postman을 좀더 빠르게 사용할 수 있는 방법

느낀 점😊

지난 수업에서 오버라이딩과 상속에 대해 공부하고 싶다는 생각을 했는데 바로 다음날 수업에 나와서 간단한 설명으로 바로 정리할 수 있었다.

유저와 인증은 정말 할 때마다 항상 헷갈릴 것 같다. 이번에 복습을 굉장히 철저하게 해야할 것 같다.

profile
데이터 엔지니어를 꿈꾸는 주니어 입니다!

0개의 댓글