Django NameError: name 'password_reset_done' is not defined
Django NameError: name 'password_reset_done' is not defined
找到了一些类似的主题,但它们较旧或未解决。
好吧,我正在关注一个 youtube 教程,但我被困在了这部分,我已经知道这是由于版本的不同,我已经去看了文档并得到了一些答案,但仍然不能'自己解决不了
我会 post 我认为相关的内容,但如果你们想要我的代码的另一部分,请询问,我会得到它。
正如我所说(在 Traceback 上)的错误是:NameError: name 'password_reset_done' is not defined
在教程中,他没有对 views.py 做任何事情,他只是在 url.py 上添加了一些已弃用的导入,所以我修复了它,但错误保持不变......
我的accounts/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)
Django到处找,没看到password_reset_done
在你的 url 模式之上,有这个:
NOTE: these built-in CBV are available forn 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'),
因为您没有调用 password_reset_done
视图,而是在 urls 中使用它。
path('reset-password/done/', password_reset_done, name='password_reset_done'),
看这个 url,您正在尝试使用不存在的 view
。
使您自己的视图继承PasswordResetDoneView
,或者不注册就直接使用url。 (您只能像这样使用 password_reset_done
调用 url
reverse('password_reset_done')
p.s。您必须将 django.contrib.auth.urls
添加到您的 urls.py
。喜欢
url('', include('django.contrib.auth.urls')),
(对于 django =< 1.11)
- 你需要加上app_name是urls.py
- 在 urls.py
中将视图添加为 viewname.as_view()
找到了一些类似的主题,但它们较旧或未解决。
好吧,我正在关注一个 youtube 教程,但我被困在了这部分,我已经知道这是由于版本的不同,我已经去看了文档并得到了一些答案,但仍然不能'自己解决不了
我会 post 我认为相关的内容,但如果你们想要我的代码的另一部分,请询问,我会得到它。
正如我所说(在 Traceback 上)的错误是:NameError: name 'password_reset_done' is not defined
在教程中,他没有对 views.py 做任何事情,他只是在 url.py 上添加了一些已弃用的导入,所以我修复了它,但错误保持不变......
我的accounts/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)
Django到处找,没看到password_reset_done
在你的 url 模式之上,有这个:
NOTE: these built-in CBV are available forn 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'),
因为您没有调用 password_reset_done
视图,而是在 urls 中使用它。
path('reset-password/done/', password_reset_done, name='password_reset_done'),
看这个 url,您正在尝试使用不存在的 view
。
使您自己的视图继承PasswordResetDoneView
,或者不注册就直接使用url。 (您只能像这样使用 password_reset_done
调用 url
reverse('password_reset_done')
p.s。您必须将 django.contrib.auth.urls
添加到您的 urls.py
。喜欢
url('', include('django.contrib.auth.urls')),
(对于 django =< 1.11)
- 你需要加上app_name是urls.py
- 在 urls.py 中将视图添加为 viewname.as_view()