2013-04-06 59 views
0

我打算在Django框架中構建我的項目。不過,我注意到所有的Django包都有models.py文件。現在,假設我有一組通用函數,我在項目中的幾個應用程序之間共享這些函數,並且計劃將這些函數定義放在一個單獨的包(或應用程序中)。那麼,我是否應該創建一個「general」應用程序並將這些函數複製粘貼到models.py文件中?或者我可以在「常規」應用程序目錄中創建一個general.py文件並將models.py留空?什麼是「Django」的方式來做到這一點?django包組織

謝謝。

+0

你知道'models.py'的用途嗎? – 2013-04-06 06:17:21

回答

1

models.py文件用於定義數據庫的結構。所以你應該讓它定義你的數據庫條目。您可以創建一個名爲generals的應用程序,並將general.py放入該應用程序,然後從該應用程序中調用該應用程序。

+0

謝謝。我剛剛開始使用Django教程,並且看到它在每個應用程序中都創建了models.py。那麼我應該從utils應用程序中刪除models.py並將general.py放在那裏? – jazzblue 2013-04-06 06:21:40

+0

我想你應該知道爲什麼會發生任何事情。正如我已經告訴過你'models.py'文件的目的。所以只要你不需要任何特定模型的數據庫表,models.py文件無論是否存在都沒有用處。 – 2013-04-06 06:24:51

1

我通常在啓動項目時從django-admin.py創建的主應用程序下創建一個utils.py文件。

1

我打算把這些功能放到一個單獨的包定義(應用程序或與此有關?)

在你決定做這一個應用程序(如果你決定讓它的應用),我建議你看看James Bennet在Developing reusable apps上的主題演講,並在laying out an application上發帖。從他的幻燈片之一:

這應該是它自己的應用程序?

  • 它與我正在做的其他事情是否正交?
  • 我需要其他網站上的類似功能嗎?
  • 是嗎?然後,我應該把它分解成一個單獨的應用程序。

如果你在一個單一的通用應用臨時抱佛腳過多的功能,它可能是更好的通用應用程序分割成多個可重複使用的應用程序。

回到原來的問題,Django預計每個應用程序中都會有一個models.py文件。所以你必須擁有這個文件,即使它是空的。

在你的models.py裏面,你應該只有應用程序的模型類。因此,如果您將models.py某些您想要重複使用的其他代碼放在裏面,您將不會遵循最佳做法。

從我前面提到的laying out an application後:

在應用層面,我一般滴在幾個文件,這取決於什麼應用程序將使用:

  • 如果應用程序定義了任何自定義操縱器,我將它們放在一個名爲forms.py的文件中,而不是放在視圖文件中。
  • 如果應用程序中有多個自定義管理器,我將它們放在名爲managers.py的文件中而不是模型文件中。
  • 如果我正在定義任何自定義上下文處理器,我把它們放在一個名爲context_processors.py的文件中。
  • 如果我設置了任何自定義調度程序信號,它們將進入一個名爲signals.py的文件。
  • 如果應用程序設置了任何聯合供稿,則供稿類將放入一個名爲feeds.py的文件中。同樣,網站地圖類也會進入sitemaps.py。
  • 中間件類放在一個名爲middleware.py的文件中。
  • 其他任何不清楚的代碼都會在一個名爲utils的文件或模塊中出現。

所有這一切都不會直接回答你原來的問題:

我能不能在「一般」的應用程序目錄下創建一個general.py文件,並留下models.py空的?

但我希望這可以爲您提供更多信息,以便做出更適合您的項目和要求的決定。