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

Django密码修改表单链接未激活无法跳转应如何排查解决?

Django密码修改链接未激活修复方案

问题根因

问题由4处代码错误共同导致:

  1. 个人信息修改视图重复覆盖表单变量,POST提交的修改操作无效
  2. UserChangeForm默认的密码字段帮助文本链接指向Django后台,而非你自定义的密码修改页面
  3. 密码修改视图的模板路径大小写不匹配,会触发模板找不到错误
  4. 密码修改成功后未更新会话哈希,用户修改密码后会被强制登出

修复步骤

1. 修复views.py代码

删除user_change视图末尾多余的表单赋值代码,修正pass_change视图的模板路径,补充会话更新和成功跳转逻辑:

from django.shortcuts import redirect
from django.contrib.auth import update_session_auth_hash

@login_required
def user_change(request):
    current_user = request.user
    form = UserProfileChange(instance = current_user)
    if request.method == 'POST':
        form = UserProfileChange(request.POST,instance = current_user)
        if form.is_valid():
            form.save()
            # 保存成功后跳转到个人主页
            return redirect('App_Login:profile')
    return render(request, 'App_Login/change_profile.html', context={'form':form})

@login_required
def pass_change(request):
    current_user = request.user
    form  = PasswordChangeForm(current_user)
    if request.method == 'POST':
        form = PasswordChangeForm(current_user, data = request.POST)
        if form.is_valid():
            user = form.save()
            # 更新会话,避免用户被登出
            update_session_auth_hash(request, user)
            # 保存成功跳转到个人主页
            return redirect('App_Login:profile')
    # 修正模板路径大小写
    return render(request, 'App_Login/pass_change.html', context = {'form':form})

2. 修复forms.py代码

移除UserProfileChange表单中的password字段,避免展示无效的默认链接:

class UserProfileChange(UserChangeForm):
    class Meta:
        model = User
        # 移除password字段
        fields = ('username','email','first_name', 'last_name')

3. 修复change_profile.html模板,添加可点击的密码修改链接

在表单下方新增密码修改入口:

{% extends 'base.html' %}
{% load crispy_forms_tags %}

{% block title %} change User profile {% endblock %}


{% block body_block %} 

<h2>Change Profile</h2>

<form method="post">
    {% csrf_token %}
    {{form|crispy}}
    <input type="submit" value="修改个人信息" class = "btn btn-primary btn-sm">
</form>
<!-- 新增可点击的密码修改链接 -->
<div class="mt-3">
    <a href="{% url 'App_Login:pass_change' %}" class="btn btn-warning btn-sm">修改账户密码</a>
</div>
{% endblock %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:18:02