为 django 项目创建自定义 SessionStore

Chr*_*est 1 python django

如果我想对一个模块进行子类化,以便django.contrib.sessions.backends.db.SessionStore我可以覆盖它的许多默认行为,那么在 Django 中执行此操作的标准方法是什么?

假设我创建一个名为mydb.py

from django.contrib.sessions.backends.db import SessionStore as DBSessionStore

class SessionStore(DBSessionStore):
    ...
Run Code Online (Sandbox Code Playgroud)

如果我的项目具有以下结构,那么最好的做法是将其放在项目文件夹下的目录mydb.py中吗?backends

myproject
myproject/manage.py
myproject/myproject
myproject/myproject/wsgi.py
myproject/myproject/__init__.py
myproject/myproject/settings.py
myproject/myproject/urls.py
myproject/db.sqlite3
myproject/myapp
myproject/myapp/tests.py
myproject/myapp/admin.py
myproject/myapp/__init__.py
myproject/myapp/models.py
myproject/myapp/apps.py
myproject/myapp/migrations
myproject/myapp/migrations/__init__.py
myproject/myapp/views.py
myproject/myapp/urls.py
myproject/backends
myproject/backends/__init__.py
myproject/backends/mydb.py
myproject/__init__.py
Run Code Online (Sandbox Code Playgroud)

settings.SESSION_ENGINE='backends.db'避免命名空间冲突的合理标准是吗?当前项目包含在python搜索路径中是djamgo配置的一般规则吗?

mda*_*acz 5

您应该将其称为文件:

SESSION_ENGINE = 'python.path.mydb'
Run Code Online (Sandbox Code Playgroud)

Django 文档缺少这个小细节。在 https://docs.djangoproject.com/en/2.2/_modules/django/contrib/sessions/middleware/第 12 行(django 1.9)中,您可以找到以下内容:

self.SessionStore = engine.SessionStore
Run Code Online (Sandbox Code Playgroud)

因此,它实际上是从您在 中提供的引擎中获取 SessionStore 类settings. SESSION_ENGINE