비밀번호 찾기, 변경 기능에서 이메일 형식 체크 질문드려요.
class UserPasswordResetView(PasswordResetView):
template_name = 'common/password_reset.html'
email_template_name = 'common/password_reset_email.html'
success_url = reverse_lazy('common:password_reset')
form_class = PasswordResetForm
def form_valid(self, form):
email = self.request.POST.get('email')
try:
validate_email(email)
except ValidationError:
messages.error(self.request, '올바른 이메일 주소를 입력하세요.')
return render(self.request, 'common/password_reset.html')
if User.objects.filter(email=email).exists():
messages.success(self.request, '이메일로 재생성된 비밀번호를 발송했습니다.')
return super().form_valid(form)
else:
messages.error(self.request, '해당 이메일의 사용자를 찾을 수 없습니다.')
return render(self.request, 'common/password_reset.html')
password_reset.html
{% extends 'base.html' %}
{% block content %}
<div class="container_block">
<h5 class="border-bottom pb-2 mb-3">비밀번호를 잊으셨나요?</h5>
<form method="post" class="post-form py-3" action="{% url 'common:password_reset' %}">
{% csrf_token %}
{% if messages %}
{% for message in messages %}
{% if message.tags == 'success' %}
<div class="alert alert-success my-3" role="alert">
{{ message.message }}
</div>
{% endif %}
{% if message.tags == 'error' %}
<div class="alert alert-danger my-3" role="alert">
{{ message.message }}
</div>
{% endif %}
{% endfor %}
{% endif %}
<div class="form-group">
<label for="email">비밀번호 재설정을 위해 회원가입시 등록했던 이메일 주소를 입력하세요.</label>
<input type="text" class="form-control" name="email" id="email">
</div>
<div class="my-3">
<a href="/common/login/">로그인으로 돌아가기</a>
</div>
<button type="submit" class="btn btn-sm btn-primary">보내기</button>
</form>
</div>
{% endblock %}
위와같이 코드를 구성하여, email 로 들어온 값이 email 형식인지 검사하는 로직을 만들고 싶습니다.
email 형식인지 확인하는 것으로 validate_email 이라는 함수가 있어 사용해보려 하였으나,
email 에 abcdefg 라고 입력할 경우, '올바른 이메일 주소를 입력하세요.' message 가 뜨지 않고,
[email protected] 등 이메일 형식으로 입력할 경우, '해당 이메일의 사용자를 찾을 수 없습니다.'/'이메일로 재생성된 비밀번호를 발송했습니다.' 등 message만 출력되고 있습니다.
email 형식을 확인하는 로직을 참고할만한 것이 있다면 알려주세요!
rlghths91 님 628
2021년 3월 22일 1:07 오전
2개의 답변이 있습니다. 1 / 1 Page
validate_email 사용법이 좀 잘못된 것 같네요.
다음 문서 참조해 보세요.
박응용 님
2021년 3월 22일 8:02 오전
class UserPasswordResetView(PasswordResetView):
template_name = 'common/password_reset.html'
email_template_name = 'common/password_reset_email.html'
success_url = reverse_lazy('common:password_reset')
def form_invalid(self, form):
messages.error(self.request, '올바른 이메일 주소를 입력하세요.')
return render(self.request, 'common/password_reset.html')
def form_valid(self, form):
email = self.request.POST.get('email')
if User.objects.filter(email=email).exists():
messages.success(self.request, '이메일로 재생성된 비밀번호를 발송했습니다.')
return super().form_valid(form)
else:
messages.error(self.request, '해당 이메일의 사용자를 찾을 수 없습니다.')
return render(self.request, 'common/password_reset.html')
이렇게 하니 작동을 하네요!
PasswordResetView 에서 이메일 형식이 아닌 값은 form_invalid 로 이메일 형식은 form_valid 로 보내는 것 같습니다.
2021년 3월 22일 11:02 오후