Django,如何生成没有模型的管理面板?

时间:2009-11-28 20:08:02

标签: python django django-admin ice

我正在建立一个相当大的项目,基本上由以下内容组成:

服务器1:   冰基服务。   Glacier2用于会话处理。   防火墙允许访问Glacier2。

服务器2:   通过Glacier2为Ice服务提供Web界面(读取,公开)。   通过Glacier 2提供Ice服务的管理界面。

我关注的是网络界面。我想使用Django,因为它都是用python编写的,并且具有非常有用的自动管理面板生成器。

Web界面不访问任何数据库。它通过Glacier2路由器连接到Server#1上的Ice服务,并使用这些服务公开的API来操作数据。

正如您可能知道的那样,Django中的admin生成依赖于Django的ORM的使用;我没有使用,因为我没有数据库可以访问。

所以我需要生成管理面板,但是,我不需要像ORM那样进行标准数据访问,而是需要拦截任何“db-access”调用并将它们转换为Ice服务调用,然后采取service的输出(如果有的话),将它转换为ORM通常返回的任何内容,并将控制权返回给Django。

任何人都知道如何做到这一点?我需要什么子类?任何具体的想法?

感谢您的时间。

4 个答案:

答案 0 :(得分:7)

我认为可能有一种比编写自定义ORMS更简单的方法来获得所需的管理集成。我在一个允许通过其控制面板API管理Webfaction电子邮件帐户的应用程序中使用它。

在这里查看models.py,admin.py和urls.py: django-webfaction

要在管理索引页面上创建条目,请使用具有managed = False

的虚拟模型

使用admin注册该模型。

然后,您可以截取管理员网址并将其引导至您自己的观看次数。

如果管理员提供的添加/编辑/删除操作对您的应用有意义,这是有意义的。否则,最好覆盖管理索引或更改列表模板以包含您自己的自定义操作

答案 1 :(得分:3)

contrib.admin的真正威力是django Forms。从本质上讲,管理工具基本上是自动生成一个Form,以匹配一个带有一点urls.py路由的模型。最后,除了管理工具之外,使用django Forms可能更容易。

答案 2 :(得分:1)

你可以“模拟”某个类,所以它看起来像一个模型,但它代理了你的API

f.e。

class QuerysetMock(object):
    def all():
        return call_to_your_api()
    [...]


class MetaMock(object):
     def fields():
         return fields_mock_objects..
     verbose_name = ''
     [...]

class ModelMock(object):
    _meta = MetaMock()
    objects = QuerysetMock()

admin.site.register(ModelMock)

这可能有用..但你需要做很多django.model兼容的东西

答案 3 :(得分:0)

django ORM有一个可插拔的后台,这意味着你可以为不是RDBMS的东西编写后端。这可能是一项相当大的任务,但是开始的好地方是Malcolm Tredinnick在DjangoCon 2008上的演讲,Inside the ORM

否则,您可以完全绕过ORM,并手动编写表单以进行所需的访问。