2016-06-21 25 views
31

Quando si cerca di accedere alla pagina di amministrazione mi dà il seguente errore:oggetto 'WSGIRequest' non ha alcun attributo 'utente' Django amministratore

System check identified no issues (0 silenced). 
June 21, 2016 - 15:26:14 
Django version 1.9.7, using settings 'librato_chart_sender_web.settings' 
Starting development server at http://127.0.0.1:8000/ 
Quit the server with CONTROL-C. 
Internal Server Error: /admin/ 
Traceback (most recent call last): 
    File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/Library/Python/2.7/site-packages/django/contrib/admin/sites.py", line 265, in wrapper 
    return self.admin_view(view, cacheable)(*args, **kwargs) 
    File "/Library/Python/2.7/site-packages/django/utils/decorators.py", line 149, in _wrapped_view 
    response = view_func(request, *args, **kwargs) 
    File "/Library/Python/2.7/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func 
    response = view_func(request, *args, **kwargs) 
    File "/Library/Python/2.7/site-packages/django/contrib/admin/sites.py", line 233, in inner 
    if not self.has_permission(request): 
    File "/Library/Python/2.7/site-packages/django/contrib/admin/sites.py", line 173, in has_permission 
    return request.user.is_active and request.user.is_staff 
AttributeError: 'WSGIRequest' object has no attribute 'user' 
[21/Jun/2016 15:26:18] "GET /admin/ HTTP/1.1" 500 78473 

Im abbastanza nuovo in Django ... ma ho seguito questo tutorial : https://docs.djangoproject.com/en/1.9/ref/contrib/admin/

Non ho alcun AdminSite personalizzato e AdminModels personalizzati.

Ho già cercato su Google questo problema, ma non riesco comunque a risolverlo in alcun modo. Puoi aiutare ?

qui è la mia settings.py:

""" 
Django settings for librato_chart_sender_web project. 

Generated by 'django-admin startproject' using Django 1.11.dev20160523235928. 

For more information on this file, see 
https://docs.djangoproject.com/en/dev/topics/settings/ 

For the full list of settings and their values, see 
https://docs.djangoproject.com/en/dev/ref/settings/ 
""" 

import os 

# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 


# Quick-start development settings - unsuitable for production 
# See https://docs.djangoproject.com/en/dev/howto/deployment/checklist/ 

# SECURITY WARNING: keep the secret key used in production secret! 
SECRET_KEY = '*[email protected]+=wzrqx^6$9z&@[email protected](w$js+ktw45lv2skez(=kz+rwff_' 

# SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = True 

ALLOWED_HOSTS = [] 


# Application definition 

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'librato_chart_sender', 
    'fontawesome', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
] 

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

ROOT_URLCONF = 'librato_chart_sender_web.urls' 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [os.path.join(BASE_DIR, 'librato_chart_sender/templates')], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

WSGI_APPLICATION = 'librato_chart_sender_web.wsgi.application' 


# Database 
# https://docs.djangoproject.com/en/dev/ref/settings/#databases 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    } 
} 


# Password validation 
# https://docs.djangoproject.com/en/dev/ref/settings/#auth-password-validators 

AUTH_PASSWORD_VALIDATORS = [ 
    { 
     'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 
    }, 
] 


# Internationalization 
# https://docs.djangoproject.com/en/dev/topics/i18n/ 

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'GMT' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 


# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/dev/howto/static-files/ 

STATIC_URL = '/static/' 
STATICFILES_DIRS = [ 
    ('css', 'librato_chart_sender/static/css'), 
    ('js', 'librato_chart_sender/static/js'), 
    ('fonts', 'librato_chart_sender/static/fonts'), 
] 

e admin.py:

from django.contrib import admin 
from .models import Configuration 

# Register your models here. 

admin.site.register(Configuration) 

risposta

57

Per risolvere questo vai settings.py dove c'è new-style MIDDLEWARE (introdotto nel Django 1.10)

Change che al vecchio stile MIDDLEWARE_CLASSES

https://docs.djangoproject.com/en/stable/topics/http/middleware/#upgrading-pre-django-1-10-style-middleware

+3

Se si utilizza Django 1.10 e virtualenv, assicurarsi che la macchina virtuale sia in esecuzione prima di avviare 'python manage.py runserver' – asgaines

+4

@asgaines Se si esegue django 1.10 non è necessario eseguire questa operazione, MIDDLEWARE è un'impostazione 1,10+. Inoltre virtualenv non è una macchina virtuale. – Mark

+1

Questo sembra lo stesso di @ GonçaloCorreia risposta (che è più vecchio), ma con meno dettagli ... – Mark

53

ho trovato la risposta. Il nome della variabile:

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

MIDDLEWARE è la configurazione di nuovo tipo introdotto in Django 1.10. Cambia il nome in MIDDLEWARE_CLASSES e ora funziona.

Così ora il codice è:

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

Sono contento che tu l'abbia capito. Per inciso, potresti voler generare una nuova chiave segreta per il tuo progetto poiché hai pubblicato quello attuale in un dominio pubblico (non buono!) –

+7

MIDDLEWARE_CLASSES è stato modificato in MIDDLEWARE in 1.10. (https://docs.djangoproject.com/en/1.10/topics/http/middleware/) Se si utilizzano versioni precedenti (<= 1.9), utilizzare MIDDLEWARE_CLASSES. – margincall

+1

Questo è successo a me a causa di dover eseguire il downgrade da una precedente installazione da 1.10 a 1.9. –

11

Non modificare MIDDLEWARE in MIDDLEWARE_CLASSES. Quello che succede qui è più probabile che tu abbia creato l'app con django 1.10 e ora la stai usando con 1.9 o una versione precedente.

Assicurarsi di utilizzare una versione specifica di django (e di tutte le altre librerie) in modo che il progetto non si interrompa durante la distribuzione o l'esecuzione su macchine diverse.

Se si dispone di una base di codice stabile eseguire semplicemente:

pip freeze > requirements.txt 

E poi, quando la distribuzione o la creazione di un nuovo ENV basta fare:

pip install -r requirements.txt 

Si dovrebbe sempre considerare l'utilizzo di versioni fisse delle vostre librerie (e, si spera, virtual envs), e quando si aggiornano le dipendenze testare ogni modifica della versione.

+0

Penso che questa sia la migliore risposta; non eseguire il downgrade a funzioni meno recenti come le altre risposte, a meno che non sia necessario. – Mark

2

La mia soluzione era che il mio Django ver. era 1.9 Ho reinstallato di nuovo a 1,10 senza modificare MIDDLEWARE a MIDDLEWARE_CLASSES.

15

Nel caso in cui qualcuno abbia riscontrato questo problema con Django 2.0, la seguente configurazione con il nuovo stile MIDDLEWARE sembra funzionare (docs here):

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

Le altre risposte fanno sembrare Django deprecato 'MIDDLEWARE' e cambiato in' MIDDLEWARE_CLASSES' ad un certo punto, ma questo è fuorviante. 'MIDDLEWARE_CLASSES' è sempre stato il vecchio modo di farlo, e' MIDDLEWARE' è sempre stato il nuovo stile. Ho modificato le altre risposte per renderlo più chiaro, così come questa risposta. – Flimm

+3

Solo con altre parole: rimuovere SessionAuthenticationMiddleware in dj2.0 – mirek

0

ho avuto un errore simile nel mio server di produzione e grazie alle briciole della sentinella ho visto che l'errore che stava alzando aveva a che fare con le mie impostazioni, in particolare gli ALLOWED_HOSTS.

Versione di Django 1.10.8 con python 2.7.

miei precedenti impostazioni:

ALLOWED_HOSTS = ['0.0.0.0', 
       'beta.mydomain.co.uk', 
       'mydomain.co.uk', 
       'www.mydomain.co.uk', 
       'alpha.mydomain.co.uk'] 

Sentry Pangrattato schermo colpo: sentry breadcrumb screenshot

Dopo di che mi sono guardato intorno e ho trovato questo:

A value beginning with a period can be used as a subdomain wildcard: '.example.com' will match example.com, www.example.com, and any other subdomain of example.com.

Link Django official docs

Così il mio ultimo se raccordi che risolvevano il problema:

ALLOWED_HOSTS = ['0.0.0.0', 
       'mydomain.co.uk', 
       'www.mydomain.co.uk', 
       '.mydomain.co.uk'] 

speranza era utile :)

1

Nel caso qualcuno sta avendo lo stesso problema in Django 2.0.2 o successiva,

solo aggiornare

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

con

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

Ha funzionato per me perché ho creato il mio progetto con django 1.0.x ma successivamente aggiornato a django 2.0.2

+0

Infine, solo questo ha funzionato per me: utilizzando MIDDLEWARE e nessun 'django.contrib.auth.middleware.SessionAuthenticationMiddleware'. – aless80

Problemi correlati