社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Django会话在本地正常工作,但一旦部署到Heroku,每次视图更改都会刷新它们

Christian Ibarbia Ruiz • 3 年前 • 1329 次点击  

在本地工作时,在更改视图时,会话可以完美地工作,但在部署到Heroku时,就好像每次视图更改时都会刷新会话,并删除其中包含的所有信息。我正在使用Heroku的Postgres数据库。

我已经看过了:Django Session没有在Heroku上运行,但问题仍然存在。其他人也有同样的问题,但没有明确的答案。

这是我当前的设置文件。任何帮助都将不胜感激

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent


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

ALLOWED_HOSTS = ['127.0.0.1', 'here goes the heroku host']


# Application definition

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

]
ASGI_APPLICATION = 'System.asgi.application'
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    '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 = 'System.urls'

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
 }
import dj_database_url

db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)

SESSION_ENGINE= 'django.contrib.sessions.backends.cached_db'


AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        'OPTIONS': {'min_length': 8}
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'authentication.validators.NumericValidator',
    },
    {
        'NAME': 'authentication.validators.UppercaseValidator',
    },
    {
        'NAME': 'authentication.validators.LowercaseValidator',
    },

]
LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True

USE_L10N = True

USE_TZ = False

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

MEDIA_ROOT = os.path.join(BASE_DIR, 'authentication/media/')
MEDIA_URL = '/authentication/media/'
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132053
 
1329 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Christian Ibarbia Ruiz
Reply   •   1 楼
Christian Ibarbia Ruiz    3 年前
DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': '...db name',
            'USER': "postgres",
            'PASSWORD': '...db password',
            'HOST': 'localhost',
            'PORT': '5432',
      } }
Chris
Reply   •   2 楼
Chris    3 年前

您正在将会话保存到数据库中,这在Heroku上是一个合理的选择,但您正在使用SQLite作为数据库。

赫罗库的 ephemeral filesystem 使SQLite成为一个糟糕的数据库选择。数据不会在dyno之间共享,并且会在dyno重新启动时丢失。 This happens frequently (每天至少一次)。

无论您选择如何处理会话,如果您想继续使用Heroku,都应该从SQLite迁移到PostgreSQL这样的客户机服务器数据库。简单地这样做可能会解决你的会话问题,这是一个副作用。