Ошибка администратора Django (всегда требуется входить в систему пару раз), когда DEBUG = False (Productions) - PullRequest
1 голос
/ 13 мая 2019

Я только что развернул Django 2.2 в Google App Engine.

Все отлично работает, кроме этого. Страница администратора требует входа в систему пару раз, пока я, наконец, не могу перейти на панель инструментов. Это также происходит, когда я нажимаю на модель публикации, чтобы создать новую запись, мне нужно снова войти в систему. Я не уверен, почему, но это происходит, когда DEBUG = False.

Я смотрю на этот вопрос и его ответ , но он может немного отличаться для отладки.

У кого-нибудь есть такая же проблема, как у меня?

Вот мой settings.py файл:

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


BASE_URL = "https://example.com"

ALLOWED_HOSTS = ['*']

# ALLOWED_HOSTS = [
#     'www.notnoob.com',
#     'notnoob.com'
# ]


# SESSION_COOKIE_NAME
# SESSION_COOKIE_DOMAIN = None
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'django.contrib.sitemaps',
    'home',
    'blog',                                                                 
    'contact',
    'ckeditor',
    'ckeditor_uploader',
    'taggit',
    'meta',
    'django_filters',

]

...
...

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 = 'dj.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'dj/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 = 'dj.wsgi.application'

.....
.....

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

DATABASES['default']['HOST'] = 'cloudsql/djangoblogdb'
if os.getenv('GAE_INSTANCE'):
    pass
else:
    DATABASES['default']['HOST'] = 'localhost'


# Password validation
# https://docs.djangoproject.com/en/2.2/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',
    },
]

Не уверен, почему, но когда DEBUG = True, все идет хорошо.

Мой admin.py:

from django.contrib import admin
from blog.models import Post, MetaModel

admin.site.site_header = "Welcome To iColdPlayer"
admin.site.site_title = "iColdPlayer Administrator"
admin.site.site_index = "iColdPlayer"

# site = admin.AdminSite(name="iColdPlayer")

# class PostAdmin(admin.ModelAdmin):
#     pass
#
# class MetaModelAdmin(admin.ModelAdmin):
#     pass

admin.site.register(Post)
admin.site.register(MetaModel)

Редактировать : Я использую Гибкая среда

1 Ответ

1 голос
/ 13 мая 2019

Проблема в том, что вы храните свои данные в SQLITE3, и, возможно, у вас запущено более одного GAE.

Таким образом, вы регистрируетесь в Экземпляре 1, но перенаправляетесь в Экземпляр 2 (без сохранения состояния .....)

И угадайте, что, на 2, вы не вошли в систему, поэтому вы должны сделать это снова.

Чтобы исправить, измените app.yml, чтобы установить максимальное количество экземпляров на 1, или используйте mysql вне GAE для хранения ваших сессий ....

Дайте мне знать, если это решит

...