用户没有属性会话-> Django

Posted

技术标签:

【中文标题】用户没有属性会话-> Django【英文标题】:User has no attribute session -> Django 【发布时间】:2012-01-14 16:29:30 【问题描述】:

查询我的数据库以获取用户以便我可以将其注销,但出现上述错误。

def logout(request):
    id = request.session["user_id"]
    user = get_object_or_404(User, pk=id)
    auth.logout(user)

我并不是说用户有一个会话属性,我告诉它它的主键等于会话中持有的数字。

【问题讨论】:

你为什么要定义一个logout()函数而不是仅仅使用来自django.contrib.authlogout()函数? 这有两个问题:首先你不需要用户实例来注销,正如 Yuji 指出的那样:其次你的用户已经在request.user,为什么还要再查询呢? 【参考方案1】:

为防止任何不必要的递归,请避免将视图命名为与从“django.contrib.auth”导入的注销函数相同的名称。

代码应如下所示:

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


def user_logout(request):
    logout(request)
    return redirect("Name of url pattern ")

【讨论】:

【参考方案2】:

auth.logout() 期望 request 不是用户实例。假设你说的是django.contrib.auth

https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.logout

【讨论】:

我正在编写一个 django-admin 命令,所以我不能使用“请求”。有没有其他方法可以在不使用请求的情况下注销用户??

以上是关于用户没有属性会话-> Django的主要内容,如果未能解决你的问题,请参考以下文章

Django 会话表单(临时保存表单)

模型属性中的 Django 用户注入

匿名用户的 Django 会话

在 Django 中,是不是可以从自定义标签中访问当前用户会话?

Django 如何在第一次迁移时制作与用户、身份验证、组、会话等相关的表?

Django框架基础之session