Django自定义用户模型PasswordResetView已认证用户跳转报错求助
问题根因
- 你的
get方法没有覆盖所有执行分支的返回值:当已认证用户访问时,if not self.request.user.is_authenticated条件不成立,try块内没有匹配的返回逻辑,同时没有触发任何异常,也不会进入except分支,最终方法没有返回HttpResponse对象,就触发了对应的报错。 - 额外逻辑问题:已登录用户跳转属于正常业务判断,完全不需要放在异常捕获块中实现,属于逻辑设计错误。
修复方案
调整get方法的逻辑顺序,先判断用户登录状态,所有分支都明确返回响应即可,修改后代码如下:
# 顶部导入对应依赖(如果已有可以跳过) from django.shortcuts import redirect class UserForgotPasswordView(auth_views.PasswordResetView): # 你原来的类属性代码保持不变,这里省略重复内容 # ...... def get(self, request, *args, **kwargs): # 先判断登录状态,已认证用户直接跳转首页 if self.request.user.is_authenticated: return redirect('page_home') # 未登录用户正常渲染页面 context = { 'email_subject': self.email_forgot_password_data['emailSubject'], 'static_json_text': static_textLanguage, 'static_json_textGlobal': static_textGlobal } return self.render_to_response(context)
可选优化建议
你当前把JSON文件读取逻辑写在类属性位置,只会在项目启动时执行一次,后续修改JSON内容如果不重启服务不会生效。如果需要动态读取JSON内容,可以把文件读取逻辑移到get方法内部。
内容的提问来源于stack exchange,提问作者Marcos Benvenuto
相关产品推荐
相关产品推荐

