Python+Django에 암호 재설정 화면 설치
다음 링크의 계속.
Python+Django에서 독립된 사용자 인증
Python+Django에 암호 변경 화면 설치
1. 비밀번호 재설정 절차
암호 재설정은 시스템에서 메일 주소를 입력한 후 발송되며 사용자는 메일을 받은 후 본문에 기재된 URL을 클릭한다.암호 변경 화면(암호 재설정용)이 열리고 암호를 변경하면 암호 재설정이 완료된 화면이 표시됩니다.
2. 설치
(1)accounts\urls.py
비밀번호 재설정을 위해 4개의 URL을 추가합니다.
accounts\urls.py
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = [
path('', views.index.as_view(), name='index'),
path('password_change/', views.PasswordChange.as_view(), name='password_change'),
path('password_change/done/', views.PasswordChangeDone.as_view(), name='password_change_done'),
path('password_reset/', views.PasswordReset.as_view(), name='password_reset'), #追加
path('password_reset/done/', views.PasswordResetDone.as_view(), name='password_reset_done'), #追加
path('reset/<uidb64>/<token>/', views.PasswordResetConfirm.as_view(), name='password_reset_confirm'), #追加
path('reset/done/', views.PasswordResetComplete.as_view(), name='password_reset_complete'), #追加
]
(2)accounts\views.py
비밀번호를 복원하기 위해views.py 편집form 레벨은 Django가 준비하여 직접 사용합니다.
accounts\views.py
from django.shortcuts import render
# PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, PasswordResetCompleteViewを追加
from django.contrib.auth.views import PasswordChangeView, PasswordChangeDoneView, PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, PasswordResetCompleteView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views import generic
from django.urls import reverse_lazy
class index(LoginRequiredMixin, generic.TemplateView):
"""メニュービュー"""
template_name = 'accounts/top.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) # 継承元のメソッドCALL
context["form_name"] = "top"
return context
class PasswordChange(LoginRequiredMixin, PasswordChangeView):
"""パスワード変更ビュー"""
success_url = reverse_lazy('accounts:password_change_done')
template_name = 'accounts/password_change.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) # 継承元のメソッドCALL
context["form_name"] = "password_change"
return context
class PasswordChangeDone(LoginRequiredMixin,PasswordChangeDoneView):
"""パスワード変更しました"""
template_name = 'accounts/password_change_done.html'
# --- ここから追加
class PasswordReset(PasswordResetView):
"""パスワード変更用URLの送付ページ"""
subject_template_name = 'accounts/mail_template/reset/subject.txt'
email_template_name = 'accounts/mail_template/reset/message.txt'
template_name = 'accounts/password_reset_form.html'
success_url = reverse_lazy('accounts:password_reset_done')
class PasswordResetDone(PasswordResetDoneView):
"""パスワード変更用URLを送りましたページ"""
template_name = 'accounts/password_reset_done.html'
class PasswordResetConfirm(PasswordResetConfirmView):
"""新パスワード入力ページ"""
success_url = reverse_lazy('accounts:password_reset_complete')
template_name = 'accounts/password_reset_confirm.html'
class PasswordResetComplete(PasswordResetCompleteView):
"""新パスワード設定しましたページ"""
template_name = 'accounts/password_reset_complete.html'
# --- ここまで
(3)templates\accounts\password_reset_form.html
templates\accounts\password_reset_form.html
{% extends "commons/base.html" %}
{% block headertitle %}
パスワードリセット
{% endblock %}
{% block content %}
<form action="" method="POST">
{{ form.non_field_errors }}
<p>メールを受信してパスワードの変更手続きを行います。</p>
<p>メールアドレスを入力して送信ボタンを押してください。</p>
{% for field in form %}
<div class="form-group">
<label for="{{ field.id_for_label }}">{{ field.label_tag }}</label>
{{ field }}
{{ field.errors }}
</div>
{% endfor %}
{% csrf_token %}
<pre>メールアドレスはあらかじめシステムに登録が必要です。
メールが届かない場合はシステム管理者に連絡してください。</pre>
<br/>
<div class="form-group row">
<div class="col-6">
<button type="submit" class="btn btn-primary btn-block">送信</button>
</div>
</div>
</form>
{% endblock %}
(4)templates\accounts\password_reset_done.html
templates\accounts\password_reset_done.html
{% extends "commons/base.html" %}
{% block headertitle %}
パスワードリセット(メール送信)
{% endblock %}
{% block content %}
<form action="" method="POST">
<p>パスワードリセットのメールを送信しました。
<br/>
メールに記載されているリンクからパスワードの再設定を行ってください。
<br/>
<br/>
<br/>
<a class="btn btn-primary col-4" href="{% url 'accounts:index' %}">ログイン画面へ</a>
</p>
</form>
{% endblock %}
(5)templates\accounts\password_reset_confirm.html
templates\accounts\password_reset_confirm.html
{% extends "commons/base.html" %}
{% block content %}
<form action="" method="POST">
{{ form.non_field_errors }}
{% for field in form %}
<div class="form-group">
<label for="{{ field.id_for_label }}">{{ field.label_tag }}</label>
{{ field }}
{{ field.errors }}
</div>
{% endfor %}
{% csrf_token %}
<button type="submit" class="btn btn-primary btn-block">送信</button>
</form>
{% endblock %}
(6)templates\accounts\password_reset_complete.html
templates\accounts\password_reset_complete.html
{% extends "commons/base.html" %}
{% block content %}
<form action="" method="POST">
<p>
パスワード再設定を完了しました。<br>
<a class="btn btn-primary btn-block" href="{% url 'accounts:index' %}">ログイン</a>
</p>
</form>
{% endblock %}
이상의 설치가 완료되었습니다.※ 비밀번호 재설정(메일 주소 입력) 화면에 입력된 메일 주소는 프로젝트 인증 사용자가 설정한 메일 주소여야 합니다.관리 사이트에서 메일 주소를 설정하세요.

3. 동작 확인
그럼 확인해 볼게요.
(1) 비밀번호 리셋(메일 주소 입력) 화면

(2) 비밀번호 리셋(메일 발송) 화면

(3) 우편물
발송된 우편물.사용자: Django가 설정한 전자 메일 주소로 전송되었습니다.
django 様
下記URLよりサイトにアクセスし、パスワードの再設定を行ってください。
再設定用URL
http://localhost:8000/reset/MQ/4yb-77d2a24a746ddeceb805/
(4) 비밀번호 재설정(비밀번호 변경) 화면

(5) 암호 재설정(암호 재설정 완료) 화면

비밀번호 리셋도 간단합니다.
Reference
이 문제에 관하여(Python+Django에 암호 재설정 화면 설치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/t-iguchi/items/4c76a10458786e115ce3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)