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

Python自定义用户模型基础疑问:删除用户代码中request.user写法的困惑

Python自定义用户模型基础疑问:删除用户代码中request.user写法的困惑

嗨,我来帮你理清楚这个疑问哈!

先看你的代码逻辑:你要删除当前登录的用户,最终实现的代码是能跑通的,但你对request.user.email这块有疑惑,咱们一步步拆解:

1. 为什么是request.user而不是request.the_user?

  • request.user是Django认证系统给你自动绑定好的!当你用@login_required装饰器时,Django会检查用户是否登录,一旦确认登录,就会把当前登录的那个用户实例挂载到request.user这个属性上——不管你用的是Django默认的User模型,还是自定义的继承了AbstractBaseUser的用户模型,这个规则都是一样的。
  • 而你定义的the_user = get_user_model(),这只是拿到了用户模型的类(不是具体的用户实例),这个变量是你自己在视图里定义的,和request对象没有任何关联,request对象里根本不存在the_user这个属性,所以写request.the_user.email肯定会报错。

2. 额外的小优化

其实你的代码还可以更简洁:既然request.user已经是当前登录的用户实例了,完全不用再通过邮箱去过滤删除,直接写:

@login_required
def del_user(request):
    request.user.delete()
    messages.warning(request, "bruker slettet.")
    return redirect("index")

这样既省去了重复查询数据库的步骤,代码也更直观~

关于AbstractBaseUser的疑问

你猜的没错!不管是默认User模型还是自定义用户模型,本质上都是基于AbstractBaseUser(或者它的子类)实现的,Django的认证系统就是依托这个基类来完成用户登录、会话管理等核心功能的,所以request.user才能正确获取到当前登录的用户对象,和你用的是哪种用户模型无关。

备注:内容来源于stack exchange,提问作者Lars

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:38:01