Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 개발자를위한파이썬
- 서버로그
- 쇠막대기
- 나는리뷰어다
- 우분투비트확인
- 한빛미디어
- machinelearning
- 로그남기기
- graphicdriver
- CrossAngle
- 결과를얻는법
- Xangle
- 심플소프트웨어
- 신영준
- texttospeech
- 인천남중
- 프로그라피
- 인하대학교
- 프로그래머스
- 개발자회고
- jaypark.dating
- 놀이동산의슈퍼컴퓨터를작동시켜라
- 2019회고
- 노트북덮개
- 인하멘토링
- 타코트론
- intell
- 봉사활동
- tacotron
- 서구동구예비군훈련장
Archives
- Today
- Total
jc.jang
13강 암호 재설정 구현하기 본문
주제
- 암호 재설정 구현하기
- 지난 강의 2019/09/03 - [프로그래밍/Django] - 12강 암호 변경 구현하기와 비슷하게 auth 기본앱을 최대한 활용하여 암호 재설정을 구현한다.
노트
- 이번에도 urls.py 등록, views.py 구현으로 지난 강의와 내용이 같다.
- views.py에서 관련 class based view의 template_name를 지정하지 않으면 admin style의 html이 나오므로 수정이 필요하다.
- 마찬가지로 PasswordResetDoneView, PaswordResetCompleteView는 완료 메세지만 보여줄 뿐 다른 기능이 없으므로 이전 view의 success_url을 재정의하여 login 페이지로 이동한다.
- accounts/urls.py
from django.urls import path, reverse_lazy
from django.contrib.auth import views as auth_views
from . import views
urlpatterns = [
# ...
path('password_reset/', views.MyPasswordResetView.as_view(), name='password_reset'),
path('reset/<uidb64>/<token>/', views.MyPasswordResetConfirmView.as_view(), name='password_reset_confirm'),
# ...
]
- django/contrib/auth/urls.py에서 그대로 가져왔다. 뷰들은 재정의가 필요하므로 알맞게 수정했다.
- accounts/views.py
class MyPasswordResetView(PasswordResetView):
success_url=reverse_lazy('login')
template_name = 'accounts/password_reset_form.html'
email_template_name = 'accounts/password_reset.html'
# html_email_template_name = ...
def form_valid(self, form):
messages.info(self.request, '암호 변경 메일을 발송했습니다.')
return super().form_valid(form)
class MyPasswordResetConfirmView(PasswordResetConfirmView):
success_url=reverse_lazy('login')
template_name = 'accounts/password_reset_confirm.html'
def form_valid(self, form):
messages.info(self.request, '암호 리셋을 완료했습니다.')
return super().form_valid(form)
- PasswordResetView, PasswordResetConfirmView를 상속받고 몇가지 필드를 오버라이드한다.
- success_url을 재정의하여 -done 등의 view를 사용하지 않는다.
- email_template_name은 이메일 전송 시 사용하는 plain text 템플릿을 정의한다.
- accounts/templates/accounts/password_reset.html
아래 주소를 통해 {{ site_name }}에 접속하여 비밀번호를 초기화 할 수 있습니다.
링크: {{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
- html_email_template_name은 이메일 전송 시 사용하는 html 템플릿을 정의한다. 만약 메일 서비스에서 html을 지원하지 않으면 email_template_name의 내용이 보여진다.
- accounts/templates/accounts/login.html
{% extends "accounts/layout.html" %}
{% block content %}
<h2>로그인</h2>
<form action="" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit">
</form>
<hr>
<a href="{% url 'request_login_via_url' %}">이메일로 로그인하기</a>
<a href="{% url 'password_reset' %}">암호 리셋하기</a>
{% endblock %}
- 로그인 페이지에 암호 리셋하기 링크를 등록한다.
질문
- 비밀번호 재설정할 때 사용되는 토큰이 어떻게 관리되는지 잘 모르겠다.
요약
- auth에 있는 view를 사용하여 암호 재설정을 구현할 수 있다.
날짜
- 오후 4시, 20190903
'Django > Django - 인증편' 카테고리의 다른 글
15강 User Admin 커스텀하기 (0) | 2019.09.08 |
---|---|
14강 커스텀 User Model 만들기 (0) | 2019.09.05 |
12강 암호 변경 구현하기 (0) | 2019.09.03 |
11강 이메일을 통한 URL 로그인 만들기 (0) | 2019.09.03 |
10강 가입환영 이메일 보내기 (0) | 2019.09.03 |
Comments