Django의 비밀번호 재설정 보기

12366 단어 codenewbiepythondjango
Django는 사용자가 내장된 비밀번호 재설정 보기를 사용하여 비밀번호를 잊어버렸을 때 비밀번호를 재설정하라는 이메일 프롬프트를 수신할 수 있는 기능으로 가득 차 있습니다. 이것은 SMTP(Simple Mail Transfer Protocol)를 통해 작동합니다. 이 기사에서는 Gmail을 호스트 서비스 제공업체로 사용할 것입니다.

먼저 settings.py로 이동하여 SMTP 매개변수를 설정합니다.

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = '<Your Gmail address>'
EMAIL_HOST_PASSWORD = '<Your Gmail password>'
EMAIL_USE_TLS = True


Django가 제공하는 기본 보기는 클래스 기반 보기입니다. urls.py 에서 먼저 뷰를 가져옵니다.

from django.contrib.auth import views as auth_views



다음으로 urls.py 의 urlpatterns 내에 다음 경로를 추가해야 합니다.

urlpatterns = [
  path('reset_password/', auth_views.PasswordResetView.as_view(), name ='reset_password'),
  path('reset_password_sent/', auth_views.PasswordResetDoneView.as_view(), name ='password_reset_done'),
  path('reset/<uidb64>/<token>', auth_views.PasswordResetConfirmView.as_view(), name ='password_reset_confirm'),
  path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view(), name ='password_reset_complete'),
]



노트:
경로의 이름은 Django가 예상하는 이름이므로 위에 이름과 정확히 같아야 합니다. 이는 이름이 다음과 같아야 함을 의미합니다.
1) reset_password,
2) password_reset_done,
3) password_reset_confirm4) 및 password_reset_complete
또한 Django는 네 가지 경로 모두에 대한 기본 템플릿을 제공하지만, 우리가 직접 만든 템플릿 이름을 추가하여 이를 사용자 정의할 수 있습니다. 각 URL 경로를 렌더링하고 as.view() 메서드 내에 이름을 추가하기 위해 4개의 새 템플릿을 생성합니다.

템플릿 이름은 다음과 같이 지정합니다.
1) reset_password.html2) password_reset_sent.html3) password_reset_form.html4) password_reset_done.html
다음으로 template_name로 추가합니다.

urlpatterns = [
  path('reset_password/', auth_views.PasswordResetView.as_view(template_name = "reset_password.html"), name ='reset_password'),
  path('reset_password_sent/', auth_views.PasswordResetDoneView.as_view(template_name = "password_reset_sent.html"), name ='password_reset_done'),
  path('reset/<uidb64>/<token>', auth_views.PasswordResetConfirmView.as_view(template_name = "password_reset_form.html"), name ='password_reset_confirm'),
  path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view(template_name = "password_reset_done.html"), name ='password_reset_complete')
]



마지막으로 템플릿을 로드해 보겠습니다.

A) reset_password.html 내에서 {{form}}를 사용하여 뷰를 전달합니다. 이것이 Django가 기대하는 기본 매개변수이기 때문입니다.

{extends 'base.html' %} 
{% block content %}

<div class="text-center" style="width: 80%; margin: 0 auto">
  <h1>Welcome to the Password Reset Page</h1>
  <h3>
    Forgot your password? Please enter the email address you used to register
    with us and we will send you a link to reset your password
  </h3>
</div>
<br/>

<form action="" method="POST" class="text-center">
  {% csrf_token %}
  {{form}}
  <input type="submit" value="Send email" /><br>
</form><br/>
<div class="text-center">
  <a href="{% url 'home' %}">Return to home page</a>
</div>

{% endblock%}



B) 인password_reset_sent.html
{% extends 'base.html' %} 
{% block content%}
<div class="text-center" style="width: 80%; margin: 0 auto">
   <h1>Password reset sent</h1> 
   <h5>We’ve emailed you instructions for setting your password, if an account exists with the email you entered. You should receive them shortly.</h5><br>
   <h6 style="width: 60%; margin: 0 auto">If you don’t receive an email, please make sure you’ve entered the address you registered with, and check your spam folder.</h6>
</div>
<div class="text-center">
  <a href="{% url 'home' %}">Return to home page</a>
</div>
{% endblock%}


C) 셋째, 우리는 password_reset_form.html
{% extends 'base.html' %} 
{% block content%}
<div class="text-center" style="width: 80%; margin: 0 auto">
  <h1>Password Reset Form</h1>
  <h6 style="width: 60%; margin: 0 auto">
    Please enter your new password so we can verify.
  </h6>
</div>
<br />
<form action="" method="POST">
  {% csrf_token %} 
  {{form}}
  <input type="submit" value="Reset Password"/>
</form>

{% endblock%}



D) 마지막으로 내password_reset_done.html
{% extends 'base.html' %} 
{% block content%}
<div class="text-center" style="width: 80%; margin: 0 auto">
  <h1>Password reset complete</h1>
  <h6 style="width: 60%; margin: 0 auto">
    Your Password has been set. You may go ahead and login
  </h6>
</div>
<br />
<div class="text-center">
  <a href="{% url 'login' %}">Login</a>
</div>
{% endblock%}



결론적으로 GMAIL을 사용할 때 'SMTP 인증 오류'가 발생할 수 있습니다. 이에 대한 간단한 해결책은 GMAIL 설정 아래에서 '보안 수준이 낮은 앱' 옵션을 활성화하는 것입니다.

좋은 웹페이지 즐겨찾기