django 의 비밀번호 재설정 메뉴 사용
django 에서 admin page 에 이런 기능을 제공한다. [ref. 2 참고]
ref. 2 에 설정하는 방법이 자세하게 나와 있다. 여기서는 이것을 user 의 password reset 기능으로 수정해 보려 한다.
django application url 설정
일단 이것을 위해서 아래처럼 새롭게 url 을 설정하자. 그러면 아래 url 에서 password reset 화면을 볼 수 있다.
- http://localhost:8080/acc/password_reset/
... from django.core.urlresolvers import reverse_lazy """ myproj.urls - url(r'^acc/', include('myaccapp.urls', namespace='acc')), """ urlpatterns = [ ... url(r'^password_reset/$', views.password_reset, {'post_reset_redirect': reverse_lazy('acc:password_reset_done'), 'email_template_name': 'registration/password_reset_email.html'}), url(r'^password_reset_done/$', views.password_reset_done, name='password_reset_done' ), url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', views.password_reset_confirm, {'post_reset_redirect': reverse_lazy('acc:password_reset_complete')},
name='password_reset_confirm'),
url(r'^reset/done/$', views.password_reset_complete, name='password_reset_complete'),
view.password_* 소스
위의 설정에서 template 정도만 수정한다면 parameter 로 template_name 을 넘겨주면 된다.
그밖의 parameter 는 view.py 에서 확인할 수 있다. 소스는 아래에서 확인할 수 있다.
ajax
이것을 ajax 에서 사용하기 위해 변경해 보자. 여기서는 rest_framework 를 이용했다. 그리고 views.password_reset 에서 POST 부분만 가져왔다.
url(r'^password_reset/$', PasswordResetView.as_view(), name='password_reset'),
from django.contrib.auth.tokens import default_token_generator from django.contrib.auth.forms import PasswordResetForm class PasswordResetView(APIView): authentication_classes = (CsrfAuthentication,) permission_classes = (AllowAny,) email_template_name='registration/password_reset_email.html' subject_template_name='registration/password_reset_subject.txt' token_generator = default_token_generator from_email = None html_email_template_name = None extra_email_context = None password_reset_form = PasswordResetForm def post(self, request): form = self.password_reset_form(request.POST) if form.is_valid(): opts = { 'use_https': request.is_secure(), 'token_generator': self.token_generator, 'from_email': self.from_email, 'email_template_name': self.email_template_name, 'subject_template_name': self.subject_template_name, 'request': request, 'html_email_template_name': self.html_email_template_name, 'extra_email_context': self.extra_email_context, } form.save(**opts) return Response(data=success({ 'message': 'sent reset password link to you email', })) return Response(status=status.HTTP_400_BAD_REQUEST, data=err({'message': 'value is not valid'}))
댓글 없음:
댓글 쓰기