Lorsque j'essaie d'accéder à la page d'administration, le message d'erreur suivant s'affiche:
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
Je suis assez nouveau dans Django ... mais j'ai suivi ce tutoriel: https://docs.djangoproject.com/fr/1.9/ref/contrib/admin/
Je n'ai pas de sites AdminSites et AdminModels personnalisés.
J'ai déjà googlé à propos de ce problème mais je ne peux toujours pas le résoudre en aucune façon. Pouvez vous aider?
voici mon 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 = '*1@+=wzrqx^6$9z&@2@d8r(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'),
]
et admin.py
:
from Django.contrib import admin
from .models import Configuration
# Register your models here.
admin.site.register(Configuration)
Pour résoudre cela, allez à settings.py
où il y a un nouveau style MIDDLEWARE
(introduit dans Django 1.10)
Changez cela en style ancien MIDDLEWARE_CLASSES
J'ai trouvé la réponse. Le nom de la variable sur:
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
est la configuration de nouveau style introduite dans Django 1.10. Changez le nom en MIDDLEWARE_CLASSES
et maintenant cela fonctionne.
Alors maintenant, le code est:
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',
]
Au cas où quelqu'un aurait ce problème avec Django 2.0, la configuration suivante avec le nouveau style MIDDLEWARE
semble fonctionner ( 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',
]
Si quelqu'un a le même problème dans Django 2.0.2 ou ultérieur,
juste mettre à jour
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',
)
avec
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',
]
Cela a fonctionné pour moi car j'ai créé mon projet avec Django 1.0.x mais mis à jour plus tard à Django 2.0.2
Vous ne devez pas modifier MIDDLEWARE en MIDDLEWARE_CLASSES. Ce qui se passe ici est plus probable que vous avez créé l'application avec Django 1.10 et que vous l'exécutez maintenant avec la version 1.9 ou une version précédente.
Assurez-vous d'utiliser une version spécifique de Django (et de toutes les autres bibliothèques) afin que votre projet ne tombe pas en panne lors du déploiement ou de l'exécution sur des machines différentes.
Si vous avez une base de code stable, lancez simplement:
pip freeze > requirements.txt
Et ensuite, lors du déploiement ou de la configuration d'un nouvel env, il suffit de faire:
pip install -r requirements.txt
Vous devriez toujours envisager d'utiliser des versions fixes de vos bibliothèques (et, éventuellement, des envs virtuels), et lors de la mise à niveau des dépendances, testez chaque modification de version.
Ma solution était que mon Django ver. J'avais réinstallé la version 1.9 à la version 1.10 sans modifier MIDDLEWARE en MIDDLEWARE_CLASSES.
Facile.....
Si vous avez choisi le code ailleurs (le projet moyen n'est pas créé sur votre ordinateur) ... il peut alors s'agir d'une configuration différente de MIDDLEWARE dans la configuration du fichier dans votre code ..... vous devez donc simplement remplacer ce MIDDLEWARE. de celui que votre Django produit (créez un projet jetable-> allez dans les fichiers de paramétrage ---> copiez cette partie MIDDLEWARE et collez-la dans le projet dans lequel vous obtenez une erreur).
J'ai eu une erreur similaire sur mon serveur de production et, grâce à la chapelure de Sentry, j'ai constaté que l'erreur qui se produisait avait trait à mes paramètres, en particulier à ALLOWED_HOSTS.
Django version 1.10.8 avec python 2.7.
Mes réglages précédents:
ALLOWED_HOSTS = ['0.0.0.0',
'beta.mydomain.co.uk',
'mydomain.co.uk',
'www.mydomain.co.uk',
'alpha.mydomain.co.uk']
Sentry Breadcrumbs capture d'écran:
Après cela, j'ai regardé autour de moi et j'ai trouvé ceci:
Une valeur commençant par un point peut être utilisée comme caractère générique de sous-domaine: ".example.com" correspondra à example.com, www.example.com et à tout autre sous-domaine de example.com.
Lien vers documentation officielle de Django
Donc, mes réglages finaux qui ont résolu mon problème:
ALLOWED_HOSTS = ['0.0.0.0',
'mydomain.co.uk',
'www.mydomain.co.uk',
'.mydomain.co.uk']
J'espère que cela a été utile :)