Language&Framework/Django

Django | 개념 정리_3주차_2. 회원가입,로그인 수정하기

JUNG씨 2022. 9. 27. 15:46

✅ 회원가입, 로그인 기능 수정하기 ✅

 

1. user앱의 views.py 수정하기 - 회원가입 기능

▪️회원가입 기능이 들어있는 sign_up_view 함수를 수정한다.

▪️회원가입 할 때, 이미 있는 유저인지 확인하기 위해 기능을 추가

 

from django.contrib.auth import get_user_model #사용자가 있는지 검사하는 함수

views.py 상단에 위 코드를 추가해주고 , sign_up_view 함수를 아래와같이 수정한다.

# Create your views here.
def sign_up_view(request):
    if request.method == 'GET' :
        return render(request, 'user/signup.html')
    elif request.method == 'POST' : # signup.html에서 넘겨준 데이터를 받는다.
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)
        password2 = request.POST.get('password2', None)
        bio = request.POST.get('bio', None)

        #password 와 password2가 일치하는지 확인해주고, 
        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')  # 저장완료(회원가입완료) 되었으면 로그인페이지로 이동

여러줄로 데이터를 넣고 save()했었는데 장고가 제공하는 기능으로 한줄로 정리가 되었다.

UserModel.objects.create_user(username=username, password=password, bio=bio)

 

 

2. user앱의 views.py 수정하기 - 로그인 기능

▪️ 아래 코드를 views.py 상단에 추가해준다. => 비밀번호까지 체크해주고, 로그인 기능까지 간단하게 가능.

from django.contrib import auth

▪️views.py의 sign_in_view 함수를 수정해준다.

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')