gpt4 book ai didi

python - 扩展数据库支持的 session 引擎

转载 作者:行者123 更新时间:2023-12-01 04:12:47 27 4
gpt4 key购买 nike

我计划通过添加 account_id 来扩展默认 session 存储,为此我点击了此链接 extending-database-backed-session-engines ,但在迁移时并未创建 account_id。

该应用程序位于 app 文件夹中。

./settings.py中。我有:

    INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.messages',
'django.contrib.staticfiles',
'app'
)

根据此链接Extending the Session Middleware我有:

SESSION_ENGINE='app.sessions'

./sessions.py中。我有:

from django.contrib.sessions.backends.db import SessionStore as DBStore
from django.contrib.sessions.base_session import AbstractBaseSession

from django.db import models


class SessionStore(DBStore):
@classmethod
def get_model_class(cls):
return CustomSession

def create_model_instance(self, data):
obj = super(SessionStore, self).create_model_instance(data)
try:
account_id = int(data.get('_auth_user_id'))
except (ValueError, TypeError):
account_id = None
obj.account_id = account_id
return obj


class CustomSession(AbstractBaseSession):
account_id = models.IntegerField(null=True, db_index=True)

class Meta:
app_label = 'sessions'

@classmethod
def get_session_store_class(cls):
return SessionStore

编辑:使用此配置,不会创建 session 表。

我还尝试在 sessions 模块中添加 sessions.py 文件,并将 app.sessions 添加到 settings 中的 >installed_apps 部分,结果相同。

我还需要修改迁移文件来创建 session 表吗?

解决方案

我已经解决了这个问题。解决办法是:

  1. settings.py 中更改 INSTALLED_APPS,如下所示:

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app'
    ]
  2. 在 `settings.py 中更改 SESSION_ENGINE,如下所示:

    SESSION_ENGINE='app.sessions'
  3. ./app/sessions.py 中,我有:

    from django.contrib.sessions.backends.db import SessionStore as DBStore
    import app

    class SessionStore(DBStore):
    @classmethod
    def get_model_class(cls):
    return app.models.models.CustomSession

    def create_model_instance(self, data):
    obj = super(SessionStore, self).create_model_instance(data)
    try:
    user_id = int(data.get('_auth_user_id'))
    except (ValueError, TypeError):
    user_id = None
    obj.user_id = user_id
    return obj
  4. ./app/models/models.py中,我有

    from django.contrib.auth.models import User
    from django.contrib.sessions.base_session import AbstractBaseSession
    from django.db import models

    from app.mysessions import SessionStore


    class CustomSession(AbstractBaseSession):
    user_id = models.IntegerField(null=True, db_index=True)

    class Meta:
    app_label = 'app'

    @classmethod
    def get_session_store_class(cls):
    return SessionStore
  5. 定期进行迁移和迁移。一切都应该正在运行。

最佳答案

如果您有一个具有自定义 session 模型的应用,则应将其包含在您的 INSTALLED_APPS 中,而不是 django.contrib.sessions 中。

SESSION_ENGINE='app.sessions'

我觉得不对。 SESSION_ENGINE 应该是您的 AbstractBaseSession 子类的路径。

关于python - 扩展数据库支持的 session 引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34678211/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com