A ship in harbor is safe, but that is not what ships are built for.

개발일지/AI 캠프

내일배움캠프 AI - 19일차 TIL, 2022.09.26

플리피나리 2022. 9. 27. 08:56
반응형

스파르타 코딩클럽 내일배움캠프 AI 웹개발자양성과정 3회차

2022.09.26. 19일차 - TIL

 

 

  • auth_user VS my_user
    - 둘다 데이터베이스의 '테이블'
    - auth_user : 장고에서 미리 생성해 준 DB 테이블
    - my_user : 우리가 ORM을 사용해 만든 DB 테이블
  • 클래스의 상속
    - class B에서 class A의 기능을 사용하려 할 때
class B(A):
	def 기능_B_1:
		return '기능_B_1'
  • UserModel 업그레이드
    - 기존에 작성한 class UserModel(models.Model)은 UserModel에서 models.Model 클래스의 기능을 사용할 것
    - auth_user을 상속받고, bio 필드를 추가
from django.db import models
from django.contrib.auth.models imort AbstractUser

class UserModel(AbstractUser):
	class Meta:
		db_table = "my_user"
        
	bio = models.TextField(max_length=500, blank=True)

        - auth_user 모델을 바꾸었음을 알림

# mySpartaSns/setting.py
AUTH_USER_MODEL = 'user.UserModel'

# Django에게 기본 인증과정(AUTH_USER_MODEL)을 user앱에 작성한 UserModel로 사용할 것이라고 알림

         - Model 변경을 DB에 알림

python manage.py makemigrations
python manage.py migrate
  • 회원가입 및 로그인 수정하기
    - 회원가입 시 이미 있는 유저인지 검색하는 기능 추가(get_user_model)
    - 비밀번호 체크 기능 추가(auth.login)
# user/views.py
from django.contrib.auth import get_user_model  # 사용자가 있는지 검사하는 함수
from django.contrib import auth  # 사용자 auth 기능

# 중간 생략....

def sign_up_view(request):
    if request.method == 'GET':  # get 요청 시 signup.html 페이지 렌더링
    	return render(request, 'user/signup.html')
    elif request.method == 'POST':  # post 요청 시
        # input 태그 내용 가져와 저장
    	username = request.POST.get('username', None)
        password = request.POST.get('password', None)
        password2 = request.POST.get('password2', None)
        bio = request.POST.get('bio', None)
        
        if password != password2:
            return render(request, 'user/signup.html')
        else:
            # 해당 username의 사용자를 찾음
            exist_user = get_user_model().objects.filter(username=username)
            if exist_user:  # 기존 이름이 있다면, 사용자를 저장하지 않고 회원가입 페이지 렌더링
            	return render(request, 'user/signup.html')
            else:
            	# 없다면, 해당 정보로 새로운 user 정보 생성
            	UserModel.objects.create_user(username=username, password=password, bio=bio)
                return redirect('/sign-in')  # 회원가입이 완료되었으므로 로그인 페이지로 이동
                
def sign_in_view(request):
    if request.method == 'POST':
    	username = request.POST.get('username', None)
        password = request.POST.get('password', None)
        
        me = auth.authenticate(request, username=username, password=password)  # 사용자 불러오기
        if me is not None:  # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
            auth.login(request, me)
            return HttpResponse("로그인 성공")
        else:
            return redirect('/sign-in')  # 로그인 실패
     elif request.method == 'GET':
     	return render(request, 'user/signin.html')
반응형