2015-05-12 108 views
0

沒有渲染的模板,這是我的整個urls.py文件,其中我設計的自定義模板的重置密碼功能權威性的意見在Django

from django.conf.urls import include, url 
from django.contrib import admin 
from django.conf import settings 
urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^articles/', include('article.urls')), 
    url(r'^', include('django.contrib.auth.urls')), 
    url(r'^password_reset/$', 'django.contrib.auth.views.password_reset',{'template_name': 'reset_password.html'}), 
    url(r'^password_reset/done/$', 'django.contrib.auth.views.password_reset_done',{'template_name': 'password_reset_done.html'}), 
    url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 'django.contrib.auth.views.password_reset',{'template_name': 'password_confirm.html'}), 
    url(r'^reset/done/$', 'django.contrib.auth.views.password_reset_complete',{'template_name': 'password_reset_complete.html'}), 

    # 
    url(r'^', include('article.urls')), 


    # user auth urls 
    url(r'^home/$', 'defcon.views.home'), 
    url(r'^accounts/login/$', 'defcon.views.login'), 
    url(r'^accounts/auth/$', 'defcon.views.auth_view'), 
    url(r'^accounts/logout/$', 'defcon.views.logout'), 
    url(r'^accounts/loggedin/$', 'defcon.views.loggedin'), 
    url(r'^accounts/invalid/$', 'defcon.views.invalid_login'), 
    # user registration urls 
    url(r'^accounts/register/$', 'defcon.views.register_user'), 
    url(r'^accounts/register_success/$', 'defcon.views.register_success'), 
    url(r'^accounts/register_auth/$', 'defcon.views.register_auth'), 

    #Serve Media Files 
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve', { 
      'document_root': settings.MEDIA_ROOT, 
     }), 
] 

我看着Django文檔@https://docs.djangoproject.com/en/1.8/topics/auth/default/,並從那裏我試圖添加這樣

url(
     '^password_reset/', 
     'django.contrib.auth.views.password_reset', 
     {'template_name': 'change-password.html'} 
    ) 

自定義模板,我得到deafult Django的UI,但我對這個自定義模板它沒有顯示出來

{% extends "user_forms.html" %} 

{% block main %} 
<span class="fa fa-user bigicon"></span> 
<h2>Enter Details</h2> 
<form action = "" method = "POST">{% csrf_token %} 
<small>{{form.email.errors}}</small> 

    <p>{{form.email}}</p> 



<button class="btn btn-default" type="submit" name="submit" />Reset my password</button> 
</form> 
<script type="text/javascript"> 
    function load(){ 
     document.getElementById("id_email").placeholder = "Enter Email"; 
    } 
</script> 
{% endblock %} 

儘管添加了自定義模板,模板仍未呈現。默認的django重置表單可見。

+0

需要更多信息。你如何將這個包含在你的urls.py中?其他網址是什麼?你沒有看到的模板有什麼區別? –

+0

更新了我的查詢。 – S7H

回答

0

您正在檢查django.contrib.auth.views.password_reset的相關視圖,但您應該在views.py中創建一個視圖,以便擁有自定義密碼重置表單。

所以在您的應用的views.py創建像

@login_required 
def change_password(request): 
    try: 
     if request.POST: 
      form = Change_password_form(request.POST) 
      user = request.user.username 
      old_password = request.POST['old_password'] 
      new_password1 = request.POST['new_password1'] 
      new_password2 = request.POST['new_password2'] 
      if form.is_valid(): 
      if new_password1 == new_password2 and old_password != new_password1: 
       u = User.objects.get(username=user) 
       u.set_password(new_password1) 
       u.save() 
       return render(request, '../templates/password_change_done.html') 
      else: 
       form = Change_password_form() 
       return render(request, '../templates/password_change_form.html', {'form':form}) 
     else: 
      form = Change_password_form() 
      return render(request, '../templates/password_change_form.html', {'form':form}) 
    except: 
      return render(request, '../templates/password_change_form.html', {'form':form}) 

class Change_password_form(forms.Form): 
    old_password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Old Password'}), required=True) 
    new_password1= forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'New Password'}), required=True) 
    new_password2= forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Confirm New Password'}), required=True) 
    action = forms.CharField(label="action", required=True) 

    def clean(self): 
     cleaned_data = super(Change_password_form, self).clean() 
     old_password = self.cleaned_data.get('old_password') 
     new_password1 = self.cleaned_data.get('new_password1') 
     new_password2 = self.cleaned_data.get('new_password2') 
     action = self.cleaned_data.get('action') 
     return self.cleaned_data 

類添加下列URL模式在urls.py

URL(R'^ /變化-password/$','appname.views.change_password',name =「change-password」),

+0

我已經做了這個改變密碼。但我想實現的是重置密碼功能。如果用戶忘記密碼,則會發送一封電子郵件來設置新密碼。在你的情況下,用戶知道他的密碼並嘗試將其重置爲其他內容。 – S7H