gpt4 book ai didi

Django-allauth:用户注销的成功 URL 的 PasswordChangeView 覆盖导致错误

转载 作者:行者123 更新时间:2023-12-04 12:59:37 24 4
gpt4 key购买 nike

通过 django-allauth 更改密码时,成功发布密码更改后的默认重定向再次是密码更改模板。因为我觉得这很令人困惑,所以我覆盖了我的 views.py 文件中的原始 PasswordChnageView:

from allauth.account.views import PasswordChangeView
from django.urls import reverse_lazy

class MyPasswordChangeView(PasswordChangeView):
success_url = reverse_lazy('home')

并更改了我的 urls.py 文件:
from django.urls import path, include
from users.views import MyPasswordChangeView

urlpatterns = [
...
# User management
path('accounts/password/change/', MyPasswordChangeView.as_view(), name="account_change_password"),
path('accounts/', include('allauth.urls')),
...
]

这在用户登录时工作正常,但是当我尝试访问 url http://127.0.0.1:8000/accounts/password/change/ 时注销时,我收到以下错误消息: AttributeError at /accounts/password/change/ 'AnonymousUser' object has no attribute 'has_usable_password'在创建自定义覆盖之前,相同行为的结果是我被重定向到登录 URL http://127.0.0.1:8000/accounts/login/?next=/

我需要对自定义 View 进行哪些更改,以便在注销的用户尝试访问 url 时重定向到登录 url http://127.0.0.1:8000/accounts/password/change/

最佳答案

看源码:PasswordChangeView从 allauth 本身没有需要登录的装饰器,它直接添加到 url 中:使用的 View 是 password_change = login_required(PasswordChangeView.as_view()) .

有2种方式:

  • 添加 login_required装饰器到您的 URL。
  • from django.contrib.auth.decorators import login_required
    path('accounts/password/change/', login_required(MyPasswordChangeView.as_view()), name="account_change_password"),
  • 继承自 LoginRequiredMixin .
  • from django.contrib.auth.mixins import LoginRequiredMixin

    class MyPasswordChangeView(LoginRequiredMixin, PasswordChangeView):
    success_url = reverse_lazy('home')

    确保 LoginRequiredMixin 位于子类的最左侧。

    关于Django-allauth:用户注销的成功 URL 的 PasswordChangeView 覆盖导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60150124/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com