2017-08-12 71 views
1

我需要一個幫助。我需要使用Django實現忘記密碼功能。我正在使用Django註冊和登錄頁面。我在下面解釋我的代碼。如何使用Django和Python實現忘記密碼功能

的login.html:

{% extends 'base.html' %} 

{% block content %} 
<h2>Log in</h2> 
    {% if form.errors %} 
    <p style="color: red">Your username and password didn't match. Please try again.</p> 
    {% endif %} 
    <form method="post"> 
    {% csrf_token %} 
    {% for field in form %} 
     <p> 
     {{ field.label_tag }}<br> 
     {{ field }}<br> 
     {% for error in field.errors %} 
      <p style="color: red">{{ error }}</p> 
     {% endfor %} 
     {% if field.help_text %} 
      <p><small style="color: grey">{{ field.help_text }}</small></p> 
     {% endif %} 
     </p> 
    {% endfor %} 
    <button type="submit">Log in</button> 
    <a href="{% url 'signup' %}">New to My Site? Sign up</a> 
    </form> 
    {% endblock %} 

views.py:

class Signup(View): 

    """ this class is used for user signup """ 

    def get(self, request): 
     """ this function used to get the sign up form """ 
     form = UserCreationForm() 
     return render(request, 'plant/signup.html', {'form': form}) 

    def post(self, request): 
     """ this function used for post the sign up data """ 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return redirect('login') 


class AuthLogin(View): 

    """ Its for login """ 

    def get(self, request): 
     """ this function used to get the login form """ 
     form = AuthenticationForm() 
     return render(request, 'plant/login.html', {'form': form}) 

    def post(self, request): 
     """ this function used for post the login data """ 
     form = AuthenticationForm(None, request.POST or None) 
     if form.is_valid(): 
      login(request, form.get_user()) 
     return redirect('/') 

urls.py:

urlpatterns = [ 
    url(r'^$', TemplateView.as_view(template_name="plant/index.html")), 
    url(r'^logout/$', auth_views.logout, 
     {'next_page': 'login'}, name='logout'), 
    url(r'^login/$', core_views.AuthLogin.as_view(), name='login'), 
    url(r'^signup/$', core_views.Signup.as_view(), name='signup'), 
] 

在登錄頁面我應該有forget password鏈接。當用戶點擊它時,重置密碼頁將打開,另一個條件是嘗試3次錯誤嘗試後,forget password按鈕將隱藏1小時。請幫助我做到這一點。

+0

可能的重複[我如何使用內置的密碼重置/更改視圖與我自己的模板](https://stackoverflow.com/questions/388800/how-do-i-use-the-built-in -password-復位變化的觀點與 - 我 - 自己的模板) –

回答

2

不要自己創建此功能,而要使用內置的Django認證視圖。 https://docs.djangoproject.com/en/1.11/topics/auth/default/#built-in-auth-views

你需要做的唯一事情是於contrib AUTH網址添加到您的項目:

urlpatterns = [ 
    url('^', include('django.contrib.auth.urls')), 
] 

這給你喜歡的登錄所有的意見,註銷,密碼重置等

如果你想要自定義模板,請將模板/path/to/site-packages/django/contrib/admin/templates/registration/複製到您的應用project/app/templates/registration/,並在其中進行任何自定義 。

如果您的應用在INSTALLED_APPS'django.contrib.auth'上市之前(應該始終是這樣的),您的自定義模板將首先挑選。