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

访问修改密码和用户名页面出现404未找到错误该如何解决

问题排查与修复方案

一、404错误排查优先级

  • 首先确认访问路径与路由配置完全匹配
    你当前urls.py中定义的修改相关路径如下,注意路径末尾必须带斜杠:
    • 修改已登录用户密码:/change-password/
    • 修改用户名+密码(你写的forget视图):/forget/
      如果关闭了Django默认的APPEND_SLASH配置,不带末尾斜杠访问会直接返回404。
  • 确认当前urls.py的加载逻辑
    如果你贴的是子应用的路由文件,必须在项目根urls.py中通过include引入,如果引入时加了前缀,访问时需要对应带上前缀。比如根路由配置为path('account/', include('你的应用名.urls')),那正确访问路径就是/account/forget/,直接访问/forget/就会404。
  • 排查视图内逻辑导致的404
    你写的forget视图中,未登录状态下访问时request.session.get('userid')返回空,get_object_or_404(User, id=userid)查询不到用户会直接返回404,这是非常容易和路由404混淆的情况。
    修复方案:要么给这个视图加登录校验装饰器,未登录时跳转到登录页而非返回404;要么调整逻辑适配未登录状态下的密码重置需求。

二、其他关联代码错误修复

这些问题不会导致404,但会在页面访问成功后报错,需要同步修改:

  1. 表单类名称不匹配
    forms.py中定义的表单类是forgetForm,但视图中POST请求里写的是ForgetForm,大小写不一致会引发类不存在错误。
  2. 普通Form调用save方法报错
    你定义的forgetForm继承自forms.Form,没有内置save方法,同时你给表单传instance=user参数也不会生效。你可以改成继承forms.ModelForm适配用户数据修改:
    # forms.py 修改后
    class forgetForm(forms.ModelForm):
        password2 = forms.CharField(
            widget=forms.PasswordInput(attrs={"class": "form-control"}),
            label="确认密码"
        )
        class Meta:
            model = User
            fields = ('username', 'password1')
            widgets = {
                "username": forms.TextInput(attrs={"class": "form-control"}),
                "password1": forms.PasswordInput(attrs={"class": "form-control"}),
            }
        def clean(self):
            cleaned_data = super().clean()
            if cleaned_data.get('password1') != cleaned_data.get('password2'):
                raise forms.ValidationError("两次输入的密码不一致")
            return cleaned_data
        def save(self, commit=True):
            user = super().save(commit=False)
            user.set_password(self.cleaned_data['password1'])
            if commit:
                user.save()
            return user
    
  3. GET请求表单实例化错误
    视图中GET请求逻辑里你实例化了SignUpForm,应该替换为你自己写的forgetForm:
    # views.py forget视图GET分支修改
    else:
        form = forgetForm(instance=user)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:48:03