본문 바로가기

스파르타 내일배움캠프

TIL31

오늘은 회원가입 이슈가있어서 이창호 튜터님께 예전에도 질문했었는데 그걸 이용해서 그때도 로직을 짯었는데 그땐 회원가입 로직을 활용해서 예전에 javascript에서 하던식으로 일일히 조건문을 걸어줘야된다고생각해서

 

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

    elif request.method == 'POST':
        user = request.user
        email = request.POST.get("email", "")
        user.email = email
        password = request.POST.get("password", "")
        if '' or password == '' or email == '':
            return render(request, 'user/user_update.html', {'error': '빈칸을 채워주세요!'})
        elif user.check_password(password):
            if '@' not in email or '.' not in email:
                return render(request, 'user/user_update.html', {'error': '이메일 형식을 확인해주세요!'})
            else:
                exist_email = get_user_model().objects.filter(email=email)
                if exist_email:
                    return render(request, 'user/user_update.html',
                                  {'error': '이메일이 존재합니다'})  # 이메일이 존재하기 때문에 사용자를 저장하지 않고 회원수정 페이지를 다시 띄움
                else:
                    user.save()
        else:
            return render(request, 'user/user_update.html',
                          {'error': '비밀번호가 일치하지않습니다'})


    return redirect('/recommend')

이런식으로 코드를 짰었는데 그럴 필요가없었다. 튜터님께 물어보니 그런과정은 우리가

 

from django.core.validators  import validate_email
from django.core.exceptions  import ValidationError
try:
    validate_email(email)
    user.email = email
    user.save()
except ValidationError:
    return render(request, 'user/user_update.html', {'error': '이메일 형식을 확인해주세요!'})
return render(request, 'recommend/index.html')

이런식으로 정규화 함수를 호출해오고

 

if user.check_password(password):

요런 조건문을 걸어줘서 가져온 user모델에서 password를 확인할수있게한다.

 

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

    elif request.method == 'POST':
        user = request.user
        password = request.POST.get("password", "")
        email = request.POST.get("email","")

        if user.check_password(password):
            try:
                validate_email(email)
                user.email = email
                user.save()
            except ValidationError:
                return render(request, 'user/user_update.html', {'error': '이메일 형식을 확인해주세요!'})
            return render(request, 'recommend/index.html')
        else:
            return render(request, 'user/user_update.html',
                             {'error': '비밀번호가 일치하지않습니다'})

    return redirect('/recommend')

이게 오늘 최종 짠 코드인데 말하고싶었던건 기존코드에서 불필요했던부분을 함수를 이용해서 간소화했고 또 auth라는 함수를 이용해서도 구현을 할수있는거같다 이 부분에 대해서도

 

user = request.user
password = request.POST.get("password", "")
auth = authentication(request, user, password)
if not auth: 비밀번호가 일치하지 않습니다.
 
이런식으로도 구현이 가능한데 aws 서버배포에 관한부분들을 팀원들과 같이 발맞춰가기에 리펙터링과정은 나중에 질문하거나 스스로 알아봐야겠다 화이팅!!

 

'스파르타 내일배움캠프' 카테고리의 다른 글

TIL32  (0) 2022.06.14
판타스틱4 KPT 회고  (2) 2022.06.14
TIL30  (0) 2022.06.11
TIL29  (0) 2022.06.10
TIL28  (0) 2022.06.09