Django NameError: имя 'password_reset_done' не определено - PullRequest
0 голосов
/ 09 мая 2018

найдено несколько таких тем, но они старше или не решены.

Хорошо, я следую учебному пособию по YouTube, и я застрял в этой части, я уже знаю, что это из-за разницы в версии, я пошел в документы и получил некоторые ответы, но все еще не могу решить это сам.

Я выложу то, что считаю актуальным, но если вы, ребята, захотите другую часть моего кода, спросите, и я получу это.

ошибка, как я уже сказал (при трассировке): NameError: имя 'password_reset_done' не определено

В этом уроке он ничего не сделал для views.py по этому поводу, он просто добавил некоторые импорта в url.py, которые устарели, поэтому я исправляю это, но ошибки остаются прежними ...

Мои аккаунты / urls.py:

from django.urls import path
from . import views
from django.contrib.auth.views import (
    login,
    logout,
    password_reset,
    PasswordResetDoneView,
    PasswordResetConfirmView,
)


urlpatterns = [

    path('', views.home),
    path('login/', login, {'template_name': 'contas/login.html'}),
    path('logout/', logout, {'template_name': 'contas/logout.html'}),
    path('register/', views.register, name='register'),
    path('perfil/', views.view_perfil, name='view_perfil'),
    path('perfil/edit/', views.edit_perfil, name='edit_perfil'),
    path('trocar-password/', views.trocar_password, name='trocar_password'),
    path('reset-password/', password_reset, name='reset_password'),
    path('reset-password/done/', password_reset_done, name='password_reset_done'),
    path('reset-password/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/',
    password_reset_confirm, name='password_reset_confirm'),

]

просто чтобы добавить немного кода. Мои views.py:

from django.shortcuts import render, redirect, HttpResponse
from contas.forms import (
RegistrationForm,
EditPerfilForm,
)
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserChangeForm, PasswordChangeForm
from django.contrib.auth import update_session_auth_hash


def home(request):
    numbers = [1,2,3,4,5]
    name = 'Lucas Cyrne'

    args = {'myName': name, 'numbers': numbers}
    return render(request, 'contas/home.html', args)

def register(request):
  if request.method=='POST':
    form = RegistrationForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('/contas')
  else:
    form = RegistrationForm()

  args = {'form':form}
  return render(request, 'contas/reg_form.html', args)

def view_perfil(request):
    args = {'user': request.user}
    return render(request, 'contas/perfil.html', args)

def edit_perfil(request):
 if request.method=='POST':
    form = EditPerfilForm(request.POST, instance=request.user)

    if form.is_valid():
        form.save()
        return redirect('/contas/perfil')
 else:
    form = EditPerfilForm(instance=request.user)
    args = {'form': form}
    return render(request, 'contas/edit_perfil.html', args)

def trocar_password(request):
  if request.method=='POST':
    form = PasswordChangeForm(data=request.POST, user=request.user)

    if form.is_valid():
        form.save()
        update_session_auth_hash(request, form.user)
        return redirect('/contas/perfil')
    else:
        return redirect('/contas/trocar_password')
  else:
    form = PasswordChangeForm(user=request.user)

    args = {'form': form}
    return render(request, 'contas/trocar_password.html', args)

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Потому что вы не вызывали password_reset_done view, но использовали его в URL.

path('reset-password/done/', password_reset_done, name='password_reset_done'),

Посмотрите этот URL, вы пытаетесь использовать view, который не существует.

Создайте свой собственный вид, наследующий PasswordResetDoneView или, просто используйте его без регистрации URL. (Вы можете вызывать URL только с помощью password_reset_done, например

reverse('password_reset_done')

p.s. Вы должны добавить django.contrib.auth.urls к вашему urls.py. как

url('', include('django.contrib.auth.urls')), (для django = <1,11) </p>

0 голосов
/ 09 мая 2018
  1. Вам необходимо добавить имя_приложения - urls.py
  2. Добавить представления как viewname.as_view () в urls.py
0 голосов
/ 09 мая 2018

Джанго ищет везде и не видит password_reset_done

и выше вашего шаблона, есть это:

ПРИМЕЧАНИЕ: эти встроенные CBV доступны для Django> = 1.11

from django.contrib.auth.views import (
login,
logout,
password_reset, # suggestion: PasswordResetView
PasswordResetDoneView,
PasswordResetConfirmView,
)

Вы видите PasswordResetDoneView

вместо:

path('reset-password/done/', password_reset_done, name='password_reset_done'), 

должно быть:

path('reset-password/done/', PasswordResetDoneView.as_view(), name='password_reset_done'), 
...