просмотры авторизации не отображают шаблоны в django

это весь мой файл urls.py, в котором я разработал собственные шаблоны для функции сброса пароля.

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, но у меня есть собственный шаблон для этого, который не отображается

{% 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 по умолчанию видны.


person S7H    schedule 12.05.2015    source источник
comment
Требуется дополнительная информация. Как вы включаете это в свой urls.py? Каковы другие URL-адреса? Каковы различия в шаблонах, которые вы не видите?   -  person Daniel Roseman    schedule 12.05.2015


Ответы (1)


Вы проверяете django.contrib.auth.views.password_reset для связанного представления, но вам следует создать представление в views.py, чтобы иметь пользовательскую форму сброса пароля.

поэтому в вашем views.py приложения app создайте класс, например

@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'^/change-password/$', 'appname.views.change_password', name="change-password"),

person nagsrk    schedule 12.05.2015
comment
Я сделал это для смены пароля. Но я пытаюсь реализовать функцию сброса пароля. Если пользователь забывает свой пароль, ему отправляется электронное письмо для установки нового пароля. В вашем случае пользователь знает свой пароль и пытается сбросить его на что-то другое. - person S7H; 12.05.2015