2016-06-15 45 views
0

如果我想要继承一个模块,如django.contrib.sessions.backends.db.SessionStore,以便我可以重写它的很多默认行为,那么在Django中这样做的标准方式是什么?为django项目创建自定义会话存储

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

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

class SessionStore(DBSessionStore): 
    ... 

如果我的项目有以下这种结构,是放,mydb.pybackends目录项目的文件夹下的最佳做法?

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 

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

+0

我不确定你在问什么。把它放在你喜欢的地方,并在设置中使用该路径。 –

回答

2

你应该把它称作到文件:

SESSION_ENGINE = 'python.path.mydb' 

Django docs缺少这个小细节。在django/contrib/sessions/middleware.py线12(Django的1.9),你可以找到这样的:

self.SessionStore = engine.SessionStore 

所以,从字面上你settings. SESSION_ENGINE提供引擎服用SessionStore类。