【问题标题】:dynamic databases created by users - django用户创建的动态数据库 - django
【发布时间】:2014-02-16 10:13:13
【问题描述】:

我想创建一个网站,用户可以在其中登录并创建自己的数据库(并且还可以操作它们)。这些数据库将非常小,主要用于测试。阅读suggestedsolutions hereon SO看来我有几个选择:

  • 使用预定义的功能(建议here)将数据库动态添加到settings.py。我发现这是一个非常糟糕的主意,因为它看起来像一个 hack 并且暴露了你自己的 settings.py 文件。
  • 将 SQlite 文件存储在媒体中,并使用 django.db.connections 连接到它们。这似乎是一个合理的解决方案,虽然我不知道如何执行它。
  • 不要使用实际的数据库,而是使用 XML 或其他格式来存储信息,这可能会降低我的效率
  • 我自己的想法,这可能是疯狂的愚蠢 - 将 SQlite 文件作为 blob 存储在 MySQL 数据库中。

最终目标是允许用户在网站上创建 django 模型,然后对它们执行查询(这是一个学习网站)。有任何想法吗?

【问题讨论】:

  • 另一种选择怎么样,只需为每个用户创建一个新的 Django 项目,使用它自己的 virtualenv 和自己的 sqlite 数据库,这样你就可以完全分离?
  • 这不是一个坏主意。如果你可以用一些伪代码来扩展它,即使我可能会将它标记为答案

标签: database django sqlite dynamic


【解决方案1】:

略多于伪代码,使用织物 :)

from fabric import api

def django_start_project(project_name):
    api.run('mkproject %s' % project_name)  # Assumes you have virtualenvwrapper
    with api.prefix('workon %s' % project_name):
        api.run('pip install django')
        api.run('django-admin.py startproject')

当然,最后一部分需要一些工作,但这是要点:)

这样称呼:

fab django_start_project:your_project

依赖关系:

【讨论】:

  • 我以前从未听说过织物。极好的。我仍然需要找到一种方法来创建 virtualenv,对吧?我不能为此使用织物(或者我可以吗?)
  • 如果您安装并设置了 virtualenv 和 virtualenvwrapper,上面的示例已经创建了 virtualenv。 mkproject 是一个 virtualenvwrapper 命令,它在 PROJECT_HOME 中创建一个新目录,在 WORKON_HOME 中创建一个 virtualenv。文档:virtualenvwrapper.readthedocs.org/en/latest/…
  • 哦。我以为你的意思是字面意思 - 一个用作包装器的 virtualenv,我不知道实际上有一个具有该名称的 python 模块,呵呵。太棒了,我会直接进入它
猜你喜欢
  • 2018-08-27
  • 1970-01-01
  • 2021-03-23
  • 2017-03-01
  • 2022-01-10
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多