오늘은 회원가입 이슈가있어서 이창호 튜터님께 예전에도 질문했었는데 그걸 이용해서 그때도 로직을 짯었는데 그땐 회원가입 로직을 활용해서 예전에 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", "")
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 |