我想删除一个用户。经过一番挣扎后,我最终是这样的: 视图.py
the_user = get_user_model()
@login_required
def del_user(request):
email = request.user.email
the_user.objects.filter(email=email).delete()
messages.warning(request, "bruker slettet.")
return redirect("index")
但是我真的不明白。正在排队
email = request.user.email.
为什么不是
email = request.the_user.email
这里有一些关于自定义用户模型的基础知识我不明白。这是因为用户引用的是 AbstractBaseUser 吗?
请原谅我问这个问题。
request
是 HttpRequest
对象的实例。它代表当前收到的请求。 AuthenticationMiddleware
对发出请求的用户进行身份验证(基于 cookie 或您配置的方式)并向其添加 request.user
属性,以便您的代码可以获取发出请求的当前用户。
你所说的
the_user
就是User
模型类。这是您在代码中为变量指定的任意名称。
仅供参考,
request.user
对象已经是一个完全成熟的User
实例,它已经有一个delete
方法。您不需要通过 the_user
模型类再次找到同一用户,您可以这样做:
@login_required
def del_user(request):
request.user.delete()
messages.warning(request, "bruker slettet.")
return redirect("index")
.user
属性由AutenticationMiddleware
[Django-doc]设置。因此,它会检查会话变量中是否有名为 _auth_user_id
的键,如果该键包含用户的主键,则它可以获取相应的用户对象(基于您选择的用户模型)。
因此,它与模型的 name 无关(顺便说一句,
the_user
不是一个好名字,因为类是用 PascalCase
编写的),名称始终是 .user
或 .auser
如果你想以异步方式获取它。
.user
对象也被获取lazily:只要你不需要访问request.user
的属性,或者进行方法调用,或者其他什么,它就不会被获取。