django.contrib.auth
에서 자동으로 생성해주는 테이블from django.contrib.auth.models import User
을 사용한다.## 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']
# 부모 클래스
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()) # 출력: 저는 한국 고등학교에 다니는 박단이입니다.
지난 수업에서 오버라이딩과 상속에 대해 공부하고 싶다는 생각을 했는데 바로 다음날 수업에 나와서 간단한 설명으로 바로 정리할 수 있었다.
유저와 인증은 정말 할 때마다 항상 헷갈릴 것 같다. 이번에 복습을 굉장히 철저하게 해야할 것 같다.