[컴][웹] django 에서 비밀번호 찾기 메뉴

forgot password / 비밀번호 찾기 메뉴 구현 / 장고에서 비밀번호 찾기 메뉴 / password resetting system



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'}))



References



댓글 없음:

댓글 쓰기