Djangoを使用してビルドする準備ができているかなり複雑な「製品」があります。 Djangoでの具体的な意味が明確ではないため、このコンテキストでは「プロジェクト」と「アプリケーション」という用語の使用を避けます。
プロジェクトには多くのアプリを含めることができます。アプリは多くのプロジェクトで共有できます。いいよ.
私はブログやフォーラムを再発明しているわけではありません-私の製品のどの部分もどのような状況でも再利用可能ではありません。直感的には、これを「アプリケーション」と呼びます。その後、すべての作業を単一の「アプリ」フォルダーで行いますか?
もしそうなら ... Djangoのproject.app
名前空間の観点から、私の傾向はmyproduct.myproduct
を使用することですが、もちろんこれは許可されていません(しかし、私が構築しているアプリケーション私のプロジェクトであり、私のプロジェクトはアプリケーションです!)。したがって、おそらく「重要な」モデルごとに1つのアプリを構築することでDjangoにアプローチすることになっていると思われますが、スキーマの境界をどこに分けて分割するかわかりません。アプリ-比較的複雑な関係を持つ多くのモデルがあります。
私はこれに共通の解決策があることを望んでいます...
myproduct.myproduct
の使用を止めることは何ですか?これを達成するために必要なことは、大まかにこれを行うことから成ります:
Django-admin.py startproject myproduct
cd myproduct
mkdir myproduct
touch myproduct/__init__.py
touch myproduct/models.py
touch myproduct/views.py
等々。 views.py
をviews.py
と呼ぶ必要がないと言ったら助けになりますか? pythonパスで、処理される関数(通常はpackage.package.views.function_name)に名前を付けることができます。そのような単純な。この「プロジェクト」/「アプリ」はすべてpythonパッケージです。
さて、あなたはそれをどうやってするのですか?むしろ、どうすればいいですか?マークアップエディターなどの重要な再利用可能な機能を作成する場合は、widgets.py
、fields.py
、context_processors.py
などを含む「トップレベルアプリ」を作成します。インポートしたいすべてのもの。
同様に、ブログのようなものをインストール全体で非常に一般的な形式で作成できる場合は、独自のテンプレート、静的コンテンツフォルダーなどを使用してアプリでラップし、Djangoのインスタンスを構成できますそのアプリのコンテンツを使用するプロジェクト。
あなたがこれをしなければならないという厳しい規則はありませんが、それはフレームワークの目標の一つです。テンプレートが含まれるすべてのものが、いくつかの共通のベースからインクルードできるという事実は、ブログが他のセットアップにぴったりとフィットすることを意味します。
ただし、実際の懸念に対処するために、はい、トップレベルのプロジェクトフォルダーで作業できないということはありません。 それがアプリの機能です。本当にしたい場合はそれを行うことができます。しかし、私はいくつかの理由でそうしない傾向があります。
website
と呼ばれるアプリを作成します。ただし、後日、このサイト専用のオリジナル機能を開発したいと思うかもしれません。それを取り外し可能にするという観点から(私がするかどうかに関係なく)、私は別のディレクトリを作成する傾向があります。これは、グローバルなurls.pyフォルダーから適切なURLを複雑に削除するのではなく、そのパッケージを構成からリンク解除してフォルダーを削除するだけで、上記の機能をドロップできることも意味します。要するに、慣習がある理由は他の慣習と同じです-あなたのプロジェクトで作業している他の人に来るときに役立ちます。 fields.py
が表示された場合、すぐにDjangoのフィールドをサブクラス化するコードを期待しますが、inputtypes.py
が表示された場合、それを見なければ意味がわかりません。
startproject
とstartapp
を使用して卒業したら、同じPythonパッケージで「プロジェクト」と「アプリ」を組み合わせることを止めることはできません。プロジェクトは実際にはsettings
モジュールにすぎず、アプリは実際にはmodels
モジュールにすぎません。他のすべてはオプションです。
小規模なサイトの場合、次のようなものを使用することはまったく合理的です。
site/
models.py
settings.py
tests.py
urls.py
views.py
「私のアプリケーションは何をしますか?」という質問に答えてみてください。 1つの文で答えられない場合は、より簡潔なロジックで複数のアプリに分割できます。
私はDjangoを使い始めてすぐにこの考えを読みましたが、この質問を頻繁に自分自身に尋ねることができ、助けになります。
アプリは再利用可能である必要はありません。お互いに依存できますが、1つのことを行う必要があります。
Djangoアプリケーションおよびプロジェクトに関する次のブログ投稿が非常に役立つことがわかりました。
原則として、製品のソースコードを整理するためのDjangoには多くの自由があります。
もしそうなら... Djangoのproject.app名前空間の観点から、私の傾向はmyproduct.myproductを使用することですが、もちろんこれは許可されていません
許可されていないようなものはありません。そのプロジェクト、誰もあなたを制限していません。適切な名前を付けることをお勧めします。
私の製品のどの部分も、どのような状況でも再利用可能ではありません。直感的には、これを「アプリケーション」と呼びます。その後、すべての作業を単一の「アプリ」フォルダーで行いますか?
一般的なDjangoプロジェクトには、すべてのプロジェクトで実際に使用される多くのアプリ(contribアプリ)があります。
プロジェクトが1つのタスクのみを実行し、1つのアプリのみを持っているとしましょう(プロジェクトがその周りを回っており、ほとんどプラグインできないため、main
と名付けます)。このプロジェクトでも、他のアプリを一般的に使用しています。
プロジェクトが1つのアプリ(INSTALLED_APPS='myproduct'
)のみを使用していると言う場合、project
を使用してプロジェクトをproject.app
として定義すると、いくつかの点を考慮する必要があります。
アプリで行われているほとんどの作業に関する限り、ほとんどのDjangoプロジェクトに当てはまると思います。
ここDjango作成者はその違いを自分自身で指摘しています 。他のプロジェクトで再利用可能でなければならないアプリについて考えることはgood。 DjangoのAppsについて考える良い方法は、最新のWebアプリケーションを提供します。
大きなdynamicJavaScriptに基づくWebアプリを作成していると想像してください。
次に、Djangoという名前のアプリを作成できます。たとえば、「FrontEnd」という名前のアプリです。シンアプリでは、コンテンツを表示します。
次に、バックエンドアプリを作成します。たとえば、ユーザーのコメントを保存する「Comments」という名前のアプリ。また、「コメント」アプリには何も表示されません。 AJAXあなたのdynamicJSウェブサイト。
このようにして、「コメント」アプリをいつでも再利用できます。プロジェクト全体のソースを開かずに、オープンソースにすることができます。そして、プロジェクトのクリーンlogicを保ちます。