Python+Django에 암호 재설정 화면 설치

17689 단어 Django2.0python3.6
Django의 암호 재설정을 시도합니다.
다음 링크의 계속.
Python+Django에서 독립된 사용자 인증
Python+Django에 암호 변경 화면 설치

1. 비밀번호 재설정 절차


암호 재설정은 시스템에서 메일 주소를 입력한 후 발송되며 사용자는 메일을 받은 후 본문에 기재된 URL을 클릭한다.암호 변경 화면(암호 재설정용)이 열리고 암호를 변경하면 암호 재설정이 완료된 화면이 표시됩니다.
  • (1) 비밀번호 리셋(메일 주소 입력) 화면
  • (2) 비밀번호 리셋(메일 발송) 화면
  • (3) 메일의 URL
  • 을 클릭
  • (4) 비밀번호 리셋(비밀번호 변경) 화면
  • (5) 비밀번호 리셋(비밀번호 리셋 완료) 화면
  • Django에서 이 비밀번호 리셋도 처음부터 이루어졌습니다. 사용하십시오.

    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) 암호 재설정(암호 재설정 완료) 화면



    비밀번호 리셋도 간단합니다.

    좋은 웹페이지 즐겨찾기