Django에서 제공하는 사용자모델로 회원가입 및 로그인을 간단하게 수정해보자.
1. 회원가입 시 사용자 중복방지 및 유저정보 생성
# user/views.py
from django.contrib.auth import get_user_model #사용자가 있는지 검사하는 함수
def sign_up_view(request):
if request.method == 'GET':
return render(request, 'user/signup.html')
elif request.method == 'POST':
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:
exist_user = get_user_model().objects.filter(username=username)
if exist_user: # 사용자가 존재한다면
return render(request, 'user/signup.html') # 저장하지 않고 회원가입 페이지를 랜더링
else:
UserModel.objects.create_user(username=username, password=password, bio=bio) # 정보를 가져와 유저정보 생성
return redirect('/sign-in') # 회원가입이 완료되었으므로 로그인 페이지로 이동
# 변경사항 1
exist_user = UserModel.objects.get(username=username)
==>
exist_user = get_user_model().objects.filter(username=username)
# 변경사항 2
new_user = UserModel()
new_user.username = username
new_user.password = password
new_user.bio = bio
new_user.save()
==>
UserModel.objects.create_user(username=username, password=password, bio=bio)
2. 로그인 시 사용자정보 비교 및 로그인
# user/views.py
from django.contrib import auth # 사용자 auth 기능
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')
# 변경사항
me = UserModel.objects.get(username=username) # 사용자 불러오기
if me.password == password: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
request.session['user'] = me.username # 세션에 사용자 이름 저장
return HttpResponse("환영합니다. {{ me.username }} 님!")
==>
me = auth.authenticate(request, username=username, password=password) # 사용자 불러오기
if me is not None: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
auth.login(request, me) # login을 간단하게 구현
return HttpResponse("환영합니다. {{ me.username }} 님!")

'Python > Django' 카테고리의 다른 글
| Django 글쓰기 기능 구현 (0) | 2022.05.31 |
|---|---|
| Django 사용자 로그인 상태 확인 & 로그아웃 (0) | 2022.05.31 |
| Django의 기본 제공 모델을 수정해보자! (0) | 2022.05.31 |
| Django 로그인 기능(Session) (0) | 2022.05.31 |
| HTTP method == 'GET' , 'POST' (0) | 2022.05.31 |