2017-08-12 49 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'上市之前(应该始终是这样的),您的自定义模板将首先挑选。