본문 바로가기
Python/Django

Django의 사용자 모델을 적용수정하자.

by K-밍키 2022. 5. 31.

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 }} 님!")