個人的なプロジェクトで Django を使い始めたところです。
組み込みの管理アプリケーションを使用することと、管理機能をアプリ自体に統合することの長所と短所は何ですか (request.user.is_staff をチェックして)?
これは投票と見なされる可能性があるため、コミュニティ wiki です。
個人的なプロジェクトで Django を使い始めたところです。
組み込みの管理アプリケーションを使用することと、管理機能をアプリ自体に統合することの長所と短所は何ですか (request.user.is_staff をチェックして)?
これは投票と見なされる可能性があるため、コミュニティ wiki です。
いくつかの理由から、私は Django の管理アプリを使用します。まず、管理アプリを作成するのは非常に難しく、正しく実行しようとすると時間がかかる場合があります。このアプリはdjango.contrib.admin
無料で、すぐに使用できます。第二に、それは非常にうまく設計されており、(技術者ではないユーザーでも)操作するのに非常に適しています. 第三に、多くの一般的なケースをカバーしており、他の方法ではできないと本当に確信するまで、時間をかけて書き直すのは賢明ではないようです。第 4 に、カスタマイズはそれほど難しくありません。たとえば、akismet の mark-as-spam ボタンと mark-as-ham ボタンを追加するのは簡単なことでした。
管理者の一部をさまざまな程度で選択的にオーバーライドするのはとても簡単です。
あなたはできる:
アプリごと、またはモデルごとに管理用テンプレートをオーバーライドします。
継承およびサブクラス化によって管理ビューをオーバーライドします
urls.pyで管理URLの前に配置して管理URLをキャッチし、管理ルックアンドフィールに基づいた独自のインターフェイスを提供します
...そしてもっとたくさん。
したがって、管理者から始めて、必要な場所に必要なカスタム機能を追加します。
管理者と巧妙なことをするアプリがたくさんあります。例えば:
また、django-snippetsで管理者関連のスニペットを検索すると、このページには豊富な情報があります。
悲しいことに、django 管理アプリは最初は多くの時間を節約しますが、後で障害になることがわかりました. 2 種類の管理ツールが必要になる場合があります。django 管理 (単純なデータ入力が必要なアプリ用) と、よりリッチなインターフェイスを必要とする他のアプリケーション用のカスタム ロール管理インターフェイスです。
Django admin を使用することを検討してください。ただし、特定のフィールド用に独自の手作りのウィジェットを使用します。洗練されたフォーム パーツを作成し、特定のフィールドまたはタイプのすべてのフィールドの入力と表示にコードを使用するように管理者に指示できます。
Jannis はいくつかのクールなことを行っており、彼の作品はそれがいかに簡単かを示しています 。
私が最近取り組んでいるプロジェクトでは、時間のさまざまな部分 (h、m、s) のドロップダウンを使用するタイムピッカーが組み込まれました。別のフィールドは、どの曜日が繰り返されるかを示します... 7 つのチェックボックスを使用します。曜日を指定し、それをピクルされた dateutil.rruleset としてデータベースに保存します。次に、さまざまなフィールドにどのウィジェットを使用するかについて管理者にヒントを与えるだけです。
これには、データ クラス、forms.Widget をサブクラス化する独自のウィジェット、forms.Field をサブクラス化する独自の Field、および model.Field も定義する必要があります。3 つのクラスはそれぞれ、素晴らしくシンプルでクリーンであり、データベースからモデルへ、モデルからウィジェットへ、そしてこれら 2 つのステップを介して戻るという役割を果たします。それは本当に美しいものです。
作成したフィールドは、蓄積できる最も再利用可能で洗練された知的財産の一部になります...そして、独自の管理者を最初から作成する必要はありません。
自分で書くよりも、Djangoの管理機能を使用します。管理者用の独自のテンプレート、独自のウィジェットなどを追加することで、Django 管理者をカスタマイズできます。私は、非常にカスタマイズされた Django 管理者を使用してプロジェクトに取り組んでいます。もし私たちがそれを手書きすることに決めていたら、完成するのに4倍の時間がかかっていたでしょう. 自分で書きたいシナリオが見当たらないだけです。