반응형
스파르타 코딩클럽 내일배움캠프 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')
반응형
'개발일지 > AI 캠프' 카테고리의 다른 글
내일배움캠프 AI - 21일차 TIL, 2022.09.28 (0) | 2022.09.29 |
---|---|
내일배움캠프 AI - 20일차 TIL, 2022.09.27 (0) | 2022.09.28 |
내일배움캠프 AI - 4주차 WIL (0) | 2022.09.26 |
내일배움캠프 AI, 18일차 TIL - 2022.09.23 (0) | 2022.09.26 |
내일배움캠프 AI, 17일차 TIL - 2022.09.22 (0) | 2022.09.23 |