Django admin 产生'WSGIRequest' object has no attribute 'user'的错误

Django服务起来之后,登录admin后台时,抛出下面错误:

AttributeError at /admin/
'WSGIRequest' object has no attribute 'user'
Request Method: GET
Request URL:    http://localhost:8000/admin/
Django Version: 1.8.2
Exception Type: AttributeError
Exception Value:    
'WSGIRequest' object has no attribute 'user'
Exception Location: C:\Python27\lib\site-packages\django\contrib\admin\sites.py in has_permission, line 162
Python Executable:  C:\Python27\python.exe

google了下,说是MIDDLEWARE配置的有问题,顺序应该保持参见(http://stackoverflow.com/questions/26576192/wsgirequest-object-has-no-attribute-user):

'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',

但是这样设置之后,依然没有解决。
我的MIDDLEWARE的配置是:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

实际上,这是Django版本的问题,1.10之前,中间件的key为MIDDLEWARE_CLASSES, 1.10之后,为MIDDLEWARE。所以在开发环境和其他环境的版本不一致时,要特别小心,会有坑。
改配置为:

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

问题解决。
参考 http://www.ziqiangxuetang.com/django/django-middleware.html

Django中,当你遇到错误"'list' object has no attribute 'read'"时,这通常是因为你在代码中将一个列表对象(list object)当作文件对象(file object)来使用了。这个错误可能出现在你尝试读取文件内容的地方。为了解决这个问题,你可以检查你的代码,确保你正在使用正确的文件对象来进行读取操作。 以下是一些可能导致这个错误的常见情况和解决方法: 1. 错误的文件对象类型:你可能错误地将一个列表对象传递给了需要文件对象的函数或方法。你可以检查你的代码,确保你正在使用正确的文件对象类型。 2. 文件路径错误:你可能提供了一个错误的文件路径,导致无法找到文件。你可以检查文件路径是否正确,并确保文件存在。 3. 文件未打开:你可能在尝试读取文件之前没有正确地打开文件。在使用文件对象之前,你需要使用`open()`函数打开文件,并在使用完毕后使用`close()`函数关闭文件。 4. 文件未关闭:你可能在读取文件后没有正确地关闭文件。在使用完文件后,你应该使用`close()`函数关闭文件,以释放资源。 以下是一个示例代码,演示了如何正确地读取文件内容: ```python file_path = "path/to/file.txt" try: file = open(file_path, "r") content = file.read() file.close() print(content) except FileNotFoundError: print("File not found.") except Exception as e: print("An error occurred:", str(e)) ``` 请注意,这只是一个示例代码,你需要根据你的具体情况进行适当的修改。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值