본문으로 바로가기

Django Project | 회원 정보 수정 | 비밀번호 변경 |

category TIL 2022. 10. 6. 03:10

장고 프로젝트 중 회원정보 수정 파트를 만들었다. 전체적인 모양을잡고 필요한 기능을 넣는게 나름 재밌었다. 현재 비밀번호와 같은 비밀번호로 설정할 수 없는 부분과 다른사람이 사용중인 닉네임을 사용하지 못하게 하는 등 기능을 넣었다 코드리뷰를 하며 주석을 달고 til에 올릴 예정이다.

###user_update##
#user/views

@login_required
def update(request):
    if request.method == 'GET':
        return render(request, 'user/update.html')

    elif request.method == 'POST':
        user = request.user

        bio = request.POST.get('bio')
        email = request.POST.get('email')
        username = request.POST.get('username')
        nickname = request.POST.get('nickname')        
        exist_nickname = get_user_model().objects.filter(nickname=nickname)

        #유저의 닉네임과 같다면 그대로 저장 필터에 걸린다면 리턴 = 유저닉네임과 입력닉네임이 같아도 저장,
            
        if exist_nickname and user.nickname == nickname:
            user.nickname = nickname
            user.bio = bio
            user.email = email
            user.username = username
            
            user.save()
            return redirect('/', user.username)
        
        elif exist_nickname and user.nickname != nickname:
            return render(request, 'user/update.html', {'error': '이미 사용중인 nickname 입니다.'})
        
        else:
            user.nickname = nickname
            user.bio = bio
            user.email = email
            user.username = username
            user.save()
            return redirect('/', user.username)

###비밀번호 변경###
#user/views
@login_required
    # return render(request, 'user/update.html', {'error': '이미 사용중인 nickname 입니다.'})
def change_password(request):
    if request.method == "POST":
        user = request.user #요청한 사람이 user로 정해짐 로그인 되어있는 사람
        origin_password = request.POST["origin_password"]
        if check_password(origin_password, user.password):
            new_password = request.POST["new_password"]
            confirm_password = request.POST["confirm_password"]
            if origin_password==confirm_password or new_password==origin_password:
                return render(request, 'user/change_password.html', {'error': '사용하고 있는 비밀번호를 입력하셨습니다.'})

            elif new_password == confirm_password:
                user.set_password(new_password)
                user.save()
                auth.login(request, user, backend='django.contrib.auth.backends.ModelBackend')
                return redirect('/')
            else:
                return render(request, 'user/change_password.html', {'error': '신규 비밀번호와 신규 비밀번호를 똑같이 입력해주세요.'})


        else:
            return render(request, 'user/change_password.html', {'error': '현재 비밀번호가 틀렸습니다.'})
    else:
        return render(request, 'user/change_password.html')