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
- 인하대학교
- 프로그래머스
- 개발자회고
- 신영준
- CrossAngle
- 프로그라피
- graphicdriver
- 개발자를위한파이썬
- 한빛미디어
- 우분투비트확인
- texttospeech
- tacotron
- 인하멘토링
- 로그남기기
- machinelearning
- intell
- 심플소프트웨어
- 결과를얻는법
- jaypark.dating
- 서버로그
- 놀이동산의슈퍼컴퓨터를작동시켜라
- 인천남중
- 노트북덮개
- 2019회고
- 쇠막대기
- 타코트론
- 나는리뷰어다
- 서구동구예비군훈련장
- Xangle
- 봉사활동
Archives
- Today
- Total
jc.jang
12강 암호 변경 구현하기 본문
주제
- 암호 변경 구현하기
- django/contrib/auth에 있는 PasswordChangeView를 이용해 암호 변경을 구현한다.
노트
- 최대한 auth에 있는 것을 활용하여 urls.py, views.py, forms.py를 구현한다.
- accounts/urls.py
from django.contrib.auth import views
from django.urls import path
urlpatterns = [
# ...
path('password_change/', views.PasswordChangeView.as_view(), name='password_change'),
path('password_change/done/', views.PasswordChangeDoneView.as_view(), name='password_change_done'),
# ...
]
- 이렇게 urls.py만 등록하고 로그인 하고 'password_change'에 접속해보면 익숙한 admin 로그인 화면창이 뜰 것이다.
- 그 화면이 뜨는 이유는 기본 template 경로가 'registration/password_change_form.html'이라서 그렇다.
- cbv를 views.py에서 재정의해주자.
- 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_change/', views.MyPasswordChangeView.as_view(), name='password_change'),
path('password_change/done/',
auth_views.PasswordChangeDoneView.as_view(
template_name='accounts/password_change_done.html'
), name='password_change_done'),
]
- PasswordChangeView를 MyPasswordChangeView로 변경하였다.
- accounts/views.py
class MyPasswordChangeView(PasswordChangeView):
success_url=reverse_lazy('profile')
template_name='accounts/password_change_form.html'
- template_name 필드를 설정해주고 템플릿 파일을 만든다.
- accounts/templates/accounts/profile.html
{% extends "accounts/layout.html" %}
{% block content %}
<h2>{{ user.username }}'s Profile</h2>
<h3>Email</h3>
{{ user.email|default:"‐" }}
<h3>Bio</h3>
{{ user.profile.bio|default:"‐" }}
<hr>
<a href="{% url 'password_change' %}">암호 변경하기</a>
{% endblock %}
- profile 페이지에 '암호 변경하기' 링크를 만들었다.
- accounts/templates/accounts/password_change_form.html
{% extends "accounts/layout.html" %}
{% block content %}
<h2>암호변경</h2>
<form action="" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit">
</form>
{% endblock %}
- 현재 비밀번호, 새 비밀번호를 입력한다.
- accounts/templates/accounts/password_change_done.html
{% extends "accounts/layout.html" %}
{% block content %}
<h2>암호 변경 완료</h2>
암호 변경을 완료했습니다.
{% endblock %}
- 비밀번호 변경 완료 후 이동할 페이지다.
- 하지만 굳이 password_change_done.html가 필요할까?
- '비밀번호가 변경되었습니다!'라는 메시지로 변경 유무를 알려주고 profile 페이지로 이동시키고 싶다.
- 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_change/', views.MyPasswordChangeView.as_view(), name='password_change'),
# path('password_change_done/',
# auth_views.PasswordChangeDoneView.as_view(
# template_name='accounts/password_change_done.html'
# ), name='password_change_done'),
]
- 이제 'password_change_done' url은 없어도 된다.
- accounts/views.py
class MyPasswordChangeView(PasswordChangeView):
success_url=reverse_lazy('profile')
template_name='accounts/password_change_form.html'
def form_valid(self, form):
messages.info(self.request, '암호 변경을 완료했습니다.')
return super().form_valid(form)
- success_url을 통해 비밀번호 변경 시 이동할 url을 설정한다.
- django message framework가 있는데, 일회성 알림 메시지용도로 사용한다.
- profile로 이동할 때 암호가 변경되었다는 메세지를 주면 사용자가 변경되었는지 알 수 있다.
질문
- 메세지에 스타일을 주고 싶었는데 템플릿에서 변수를 사용해서 출력하려고하니 메세지가 중복되서 출력된다.
- 차후에 강의에서 설명한다고 하니 그때가서 알아보자.
요약
- django/contrib/auth에는 다양한 것들이 구현되어있다.
날짜
- 오후 3시, 20190903
'Django > Django - 인증편' 카테고리의 다른 글
14강 커스텀 User Model 만들기 (0) | 2019.09.05 |
---|---|
13강 암호 재설정 구현하기 (0) | 2019.09.03 |
11강 이메일을 통한 URL 로그인 만들기 (0) | 2019.09.03 |
10강 가입환영 이메일 보내기 (0) | 2019.09.03 |
9강 로그인 아이디로 이메일 사용하기 (1) | 2019.09.02 |
Comments