簡體   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