Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于请求动态选择数据库_Python_Django - Fatal编程技术网

Python 基于请求动态选择数据库

Python 基于请求动态选择数据库,python,django,Python,Django,我试图保持我的RESTful站点干燥,但我想不出一个好方法来分解代码,以便从每个“用户”的单独数据库中动态选择。我们为每个客户都有一个单独的数据库。这是URL的一部分,并作为关键字arg传递到每个视图中。我想给每个视图提供访问相应数据库的行为,而不必确保每个编写视图的程序员都记得使用 Thing.objects.using(user).all() 及 每一次。似乎应该有某种方法来拦截请求,并在到达视图之前将基于args的默认数据库设置为视图,从而允许我们使用通常的 Thing.objects.

我试图保持我的RESTful站点干燥,但我想不出一个好方法来分解代码,以便从每个“用户”的单独数据库中动态选择。我们为每个客户都有一个单独的数据库。这是URL的一部分,并作为关键字arg传递到每个视图中。我想给每个视图提供访问相应数据库的行为,而不必确保每个编写视图的程序员都记得使用

Thing.objects.using(user).all()

每一次。似乎应该有某种方法来拦截请求,并在到达视图之前将基于args的默认数据库设置为视图,从而允许我们使用通常的

Thing.objects.all()

这还具有将所有用户解析代码分解到更合适位置的优势。

我们通过以下技术实现这一点

  • Apache提取路径的第一部分并将其路由到特定的mod_wsgi守护进程

  • 每个mod_wsgi守护进程都是不同客户的安装

  • 我们有许多并行客户,每个客户都有(几乎)相同的代码,所有这些都基于基础软件的一个通用安装

    每个客户都有一个单独的
    settings.py
    ,具有其独特的配置


    他们彼此不了解(实际上不可能),因为Apache已经为我们剥离了路径的顶层。

    这将是我的建议。
    Thing.objects.all()