繁体   English   中英

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

[英]Django, how to generate an admin panel without models?

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

服务器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服务调用,然后获取服务的输出(如果有的话,将其转换为ORM通常返回的任何内容并将控制权返回给Django。

谁知道我怎么能这样做? 我需要什么子类? 任何具体的想法?

谢谢你的时间。

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

看看models.py,admin.py和urls.py这里: Django的webfaction

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

使用admin注册该模型。

然后,您可以拦截管理员网址并将其引导至您自己的视图。

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

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

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

FE

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兼容的东西

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM