[英]How to use same django project multiple times - each with diffrent database?
[英]Is it possible for Django to use the same link and a database for each client?
Django是否可以為每個客戶端使用相同的鏈接和數據庫?
您好,我是Django的新手,我有一個問題。 我將php系統帶到Django,其中所有客戶端都使用相同的鏈接來訪問系統,但是每個客戶端的數據庫都包含用戶,訪問組等。在自定義登錄屏幕中,他們通知其客戶端ID,用戶和密碼進行身份驗證,其中客戶端ID始終是數據庫的名稱。
我做了以下代碼來更改可能是錯誤的數據庫連接:
def change_db (self):
connections ['default']. settings_dict ['NAME'] = self.db
return True
該代碼甚至交換了我想要訪問的數據庫,但是使用運行服務器在本地計算機上進行測試,如果另一個客戶端(例如在另一個瀏覽器中)同時訪問,它將替換另一個客戶端。
有沒有人或者有解決的想法? 我搜索了路由器,不知道是否可以解決我的問題,或者是否存在切換連接和刪除其他客戶端的相同問題。
感激。
我想我解決了我的問題,發現了一個對我非常有用的鏈接:
它使用中間件來獲得響應人員所提到的連接和路由器,在使用子域的情況下,我對此鏈接進行了一些更改,以獲得可以解決我的情況的前綴:
遵循代碼:
from django.utils.deprecation import MiddlewareMixin
from django.contrib.sessions.middleware import SessionMiddleware
import re
import threading
request_cfg = threading.local()
#Middleware
class RouterMiddleware(MiddlewareMixin):
def process_request(self, request):
words = request.get_full_path()
db_name = words.split('/')[1]
request_cfg.cfg = db_name
return None
def process_view(self, request, view_func, view_args, view_kwargs):
cliente = view_kwargs.get('cliente')
if cliente:
request.cliente = cliente
view_kwargs.pop('cliente')
return view_func(request, *view_args, **view_kwargs)
def process_response(self, request, response):
if hasattr(request_cfg, 'cfg'):
del request_cfg.cfg
return response
#Router
class DatabaseRouter (object):
def _default_db(self):
if hasattr(request_cfg, 'cfg'):
return request_cfg.cfg
else:
return 'default'
def db_for_read(self, model, **hints):
return self._default_db()
def db_for_write(self, model, **hints):
return self._default_db()
謝謝任何試圖幫助我的人:)
根據文檔,你不應該在運行時編輯settings.py,但你嘗試過這個 ?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.