2009-01-30 47 views
20

我剛開始使用Django進行個人項目。Django管理員應用程序或滾動我自己的?

使用內置Admin應用程序與將我的管理功能集成到應用程序本身(通過檢查request.user.is_staff)有什麼優缺點?

這是一個社區wiki,因爲它可以被認爲是一個民意調查。

+0

我很挑剔(TypeError,你會得到很豐富),但你想使用`request.user.is_staff` - 沒有parens。這是一種屬性,而不是一種方法。 – AdamKG 2009-01-30 20:03:41

+0

對不起,習慣的力量。我以Java開發人員的身份工作,因爲出於封裝的原因,您總是使用getter和setter。 – Powerlord 2009-01-30 20:11:52

回答

16

這真的取決於我猜的項目。雖然您可以在管理員中完成所有操作,但當您的應用變得更復雜時,使用管理員也會變得更加複雜。如果你想讓你的應用程序很容易管理,你需要控制每一個細節,這對管理應用程序來說並不是真的可行。

我猜你應該看到它是這樣的:

使用Django管理:節省時間寫它,使用它失去的時間。
滾動你自己的管理員:不用花時間寫它,節省使用它的時間。

+0

那麼我可能會花時間滾動我自己的管理員。 – Powerlord 2009-01-30 21:53:25

+3

-1:這不是一個簡單的權衡。您需要的內容的80%是內置的。少於20%需要手工構建。 – 2009-01-31 02:52:39

17

由於多種原因,我會使用Django的管理應用程序。首先,編寫一個管理應用程序可能會非常棘手,如果您想正確執行,需要一些時間,並且django.contrib.admin是免費的,並且可以直接使用。其次,它的設計非常好,非常適合(甚至對於非技術用戶)。第三,它涵蓋了很多常見的案例,在重寫它之前浪費時間看起來並不明智,直到你確信自己無法做到這一點。第四,定製並不是那麼難。例如,添加akismet標記爲垃圾郵件和mark-as-ham按鈕確實是小菜一碟。

3

我很傷心地發現,雖然django管理員應用程序一開始就節省了大量時間,但隨着您的消費者需要更多不易與默認管理界面集成的功能,它將成爲稍後的一個障礙。您最終可能會遇到兩種管理工具:django管理員(用於需要簡單數據輸入的應用程序)以及用於需要更豐富界面的其他應用程序的自定義滾動管理界面。

7

很容易有選擇地不同程度地覆蓋管理員的部分。

您可以:

  1. 上針對應用程序的基礎,甚至通過模型模型基礎覆蓋管理模板。通過繼承和子類通過把你之前在urls.py

  2. 抓管理URL的,並提供了基於管理員看你自己的界面和感覺

  • 覆蓋管理的意見。 ..以及更多。

    所以從管理員開始,然後插入任何您需要的自定義功能。

    有一些應用程序可以與管理員做些聰明的事情。例如:

    • django-reversion接管 管理日誌,並將其延伸到全 歷史。
    • Tusk CMS結合了 django-mptt應用程序與JQuery嵌套 可排序的小部件以一種整潔的方式。

    另外搜索與管理相關的片段的django-snippets和this page已獲得豐富的信息。

  • 3

    請考慮使用Django管理員,但要使用您自己的手工製作特定字段的小部件。您可以創建複雜的表單部分,並告訴管理員將您的代碼用於任何特定字段的輸入和顯示或類型的所有字段。

    Jannis已經做了一些很酷的東西,他的作品顯示了它是多麼容易: http://jannisleidel.com/2008/11/wysiwym-editor-widget-django-admin-interface/

    ,我工作的一個項目最近將使用下拉菜單的時間各部分時間選擇器,(h,m,s)另一個字段會指示一週中的哪幾天會重複發生......它將在一週中使用7個複選框,並將其作爲pickle dateutil.rruleset存儲在數據庫中。然後,您只需提供有關用於各個字段的小部件的管理提示。

    它涉及到定義你的數據類,你自己的小部件的子類forms.Widget,你自己的Field,它的子類forms.Field和一個model.Field。這三個類中的每一個都很好,簡單而乾淨,並且負責從數據庫到模型,模型到Widget的轉換,並且返回到這兩個步驟。這真是一件美麗的事情。

    您創建的字段將成爲您可以積累的最可重用,最成熟的知識產權中的一部分......而且您不必從頭編寫自己的管理員。

    1

    我建議在幾乎所有類型的項目上啓用管理站點。設置它的成本非常低,它爲您提供了一個檢查和修改站點的合理便利機制。

    如果您的網站主要是單向的信息流,從網站管理員到訪問者,那麼管理網站可能就是您所需要的。

    但是,如果您的網站在其用戶之間有更豐富的交互,則需要編寫django視圖,以便實現交互,同時還限制用戶實際執行的操作。

    1

    我會用Django管理功能,寫你自己的。您可以通過添加自己的管理模板,您自己的小部件等來自定義Django管理員。我正在使用非常定製的Django管理員工作項目。如果我們決定手寫它,那麼完成這個過程需要4倍的時間。我只是看不到你想寫自己的場景。

    相關問題