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

Django认证用户删除账户异常:提交后页面刷新无删除效果

Django已认证用户删除自身账户功能异常

点击删除按钮后,页面仅刷新停留在原模板,POST请求返回200 OK状态码,日志记录如下:

[06/Aug/2022 11:46:33] "POST /members/profile/ HTTP/1.1" 200 4998

相关代码文件

members.views.profiles.py

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User


@login_required(login_url="/accounts/login/")
def profile(request):
    template_name = "members/profile.html"
    context = {}
    return render(request, template_name, context)


def profile_delete(request, pk):
    user_profile = User.objects.filter(pk=pk)
    template_name = "members/profile_delete.html"
    context = {
                  "user_profile": user_profile,
              },

    if request.method == "POST":
        user_profile.delete()
        return render(request, template_name, context)

    return render(request, template_name, context)

members.urls.py

from django.urls import path
from allauth.account import views as allauth_views
from . import views


app_name = "members"
urlpatterns = [
    path("login/", allauth_views.LoginView.as_view(), name="login"),
    path("logout/", allauth_views.LogoutView.as_view(), name="logout"),
    path("profile/", views.profile, name="profile"),
    path("profile/<int:pk>/delete/", views.profile_delete, name="profile_delete"),
]

profile.html

<div>
    <form method="POST">
        {% csrf_token %}
        <p>确定要删除账户 <strong>{{ user | title }}</strong> 吗?</p>
        <button class="btn btn-danger" href="{% url 'members:profile_delete' user.pk %}" type="submit">
            删除账户
        </button>
    </form>
</div>

解决方案及问题说明

核心问题点

  1. 表单未指定action属性,导致POST请求发送到当前的/members/profile/路径,而非删除接口/members/profile/<pk>/delete/
  2. 原视图使用User.objects.filter(pk=pk)返回QuerySet,即使删除后仍会返回空QuerySet,无法准确处理单个用户的删除逻辑
  3. 原视图中context定义后多了一个逗号,导致context变成元组而非字典,可能引发模板渲染异常

修改后的代码

调整后的profile.html(补充表单action)

<div>
    <form method="POST" action="{% url 'members:profile_delete' user.pk %}">
        {% csrf_token %}
        <p>确定要删除账户 <strong>{{ user | title }}</strong> 吗?</p>
        <button class="btn btn-danger" type="submit">
            删除账户
        </button>
    </form>
</div>

修改后的views.py

from django.shortcuts import render, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User


@login_required(login_url="/accounts/login/")
def profile(request):
    template_name = "members/profile.html"
    context = {}
    return render(request, template_name, context)


def profile_delete(request, pk):
    user_profile = get_object_or_404(User, pk=pk)
    if request.method == "POST":
        user_profile.delete()
        # 删除后可跳转到首页或登录页,此处保留原模板渲染逻辑
        template_name = "members/profile_delete.html"
        return render(request, template_name, {})
    # GET请求展示确认页面
    return render(request, "members/profile_delete.html", {"user_profile": user_profile})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:17:03