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

2024-06-01 08:01:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在建设一个相当大的项目,基本上包括:

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

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

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

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

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

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

有人知道我怎么做吗?我需要什么子类?有什么具体的想法吗?

谢谢你的时间。


Tags: 数据项目django服务器web数据库面板网页
3条回答

您可以“模拟”某些类,使其看起来像模型,但它确实代理到您的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兼容的事情

contrib.admin的真正功能是django Forms。本质上,管理工具基本上是自动生成一个表单来匹配一个模型,其中包含一些url.py路由。最后,除了管理工具之外,使用django表单可能会更容易。

我认为有一种比编写定制ORMS更简单的方法来获得您想要的管理集成。我在一个应用程序中使用它,允许通过他们的控制面板API管理Webfaction电子邮件帐户。

在这里查看models.py、admin.py和url.py:django-webfaction

要在管理索引页上创建条目,请使用托管为False的虚拟模型

向管理员注册该模型。

然后,您可以拦截管理url并将它们指向您自己的视图。

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

相关问题 更多 >