You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django修改密码视图出现DisallowedRedirect错误

Django修改密码视图DisallowedRedirect错误解决办法

问题根源

你的代码存在两个核心问题:

  1. URL配置冲突:urls.py中mudar_senha路径错误绑定了Django自带的PasswordChangeView,而非你自定义的views.mudar_senha。这导致你在自定义视图里写的重定向代码根本没被执行,实际生效的是自带视图错误配置的success_url。
  2. 自带视图success_url配置错误:你给PasswordChangeView的success_url直接传了命名路由字符串'learningLogApp:index',Django会把这个字符串当成完整URL(比如解析成http://learningLogApp:index),触发了"Unsafe redirect to URL with protocol"的安全校验错误。

修复步骤

1. 修正URL路由配置

打开users/urls.py,把mudar_senha的路径改成绑定你的自定义视图:

urlpatterns = [
    # 其他路由保持不变
    path('mudar_senha/', views.mudar_senha, name='mudar_senha'),  # 替换原来的PasswordChangeView
]

2. 确保自定义视图的重定向写法正确

在你的views.py里,以下两种写法都是正确的(任选其一即可),之前的问题是因为路由没指向这个视图,所以这些代码没生效:

# 写法1:使用redirect快捷函数
return redirect('users:perfil')

# 写法2:使用HttpResponseRedirect + reverse
from django.http import HttpResponseRedirect
from django.urls import reverse

return HttpResponseRedirect(reverse('users:perfil'))

错误写法避坑

你之前尝试的这些写法都是错误的,别再用:

  • sucess_url = reverse_lazy(request, 'users/perfil.html'):reverse_lazy不需要传request参数,且不能直接用模板路径当参数
  • return reverse_lazy(...):reverse_lazy返回的是延迟解析对象,不能直接作为视图响应返回,必须包裹在HttpResponseRedirect或redirect里
  • reverse_lazy(request, 'users:perfil'):多传了request参数,函数视图里用reverse就行,reverse_lazy主要用于类视图的属性配置

验证

修改后重新启动服务,测试修改密码流程:密码修改成功后会正常重定向到用户个人页面,不会再触发DisallowedRedirect错误。

内容的提问来源于stack exchange,提问作者1sefirot1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:33:26