我正在建立一个相当大的项目,基本上由以下内容组成:
服务器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。
任何人都知道如何做到这一点?我需要什么子类?任何具体的想法?
感谢您的时间。
答案 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,并手动编写表单以进行所需的访问。