0

发现了一些这样的主题,但它们较旧或未解决。

好吧,我正在关注一个 youtube 教程,我被困在这部分,我已经知道这是由于版本的不同,我已经去了文档并得到了一些答案,但我仍然无法自己解决.

我会发布我认为相关的内容,但如果你们想要我的代码的另一部分,我会得到它。

我所说的错误(在 Traceback 上)是:NameError: name 'password_reset_done' is not defined

在教程中,他没有在 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'),

]

只是为了添加更多代码。我的意见.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)
4

3 回答 3

2

Django到处寻找,却没有看到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'), 
于 2018-05-09T01:59:56.967 回答
0
  1. 你需要添加 app_name 是 urls.py
  2. 在 urls.py 中将视图添加为 viewname.as_view()
于 2018-05-09T02:12:28.597 回答
0

因为您没有调用password_reset_done视图,而是在 url 中使用它。

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

看看这个 url,你正在尝试使用view不存在的。

使您自己的视图继承PasswordResetDoneView,或者直接使用它而不注册 url。(您只能password_reset_done像这样调用 url

reverse('password_reset_done')

ps 你必须添加django.contrib.auth.urls到你的urls.py. 喜欢

url('', include('django.contrib.auth.urls')),(对于 django =< 1.11)

于 2018-05-09T02:07:11.127 回答