溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Django 項目布局方法(值得推薦)

發(fā)布時間:2020-09-09 19:47:38 來源:腳本之家 閱讀:176 作者:haiiiiiyun 欄目:開發(fā)技術(shù)

一、這種布局的優(yōu)點

  1. 項目中的每個應(yīng)用都相對獨立,方便以后拿出來重用。
  2. 這樣的布局會促使你在開發(fā)過程中考慮每個應(yīng)用的重用性。
  3. 開發(fā)、測試、生產(chǎn)等不同的環(huán)境都有各自獨立的配置文件,方便配置項的共享和定制。
  4. 不同的環(huán)境都有各自獨立的 pip requirements 文件。
  5. 每個應(yīng)用都有各自的 templates 和 static 目錄,你可以通過項目級的 templates 和 static 目錄中的文件對各應(yīng)用中的相應(yīng)內(nèi)容進(jìn)行覆蓋。
  6. 對 models、views、managers 等的測試都各自保存在獨立的文件中,易于閱讀和理解。

二、Django 默認(rèn)產(chǎn)生的布局

假設(shè)項目名為 foo, 使用 python django-admin.py startproject foo 命令產(chǎn)生的默認(rèn)布局會是:

foo/
  manage.py
  foo/
    __init__.py
    settings.py
    urls.py
    wsgi.py

三、推薦的項目布局

假設(shè)我們的項目名為 myproject, 其中有兩個應(yīng)用 blog 和 users,推薦的項目布局可以為:

myproject/
  manage.py
  myproject/
    __init__.py
    urls.py
    wsgi.py
    settings/
      __init__.py
      base.py
      dev.py
      prod.py
  blog/
    __init__.py
    models.py
    managers.py
    views.py
    urls.py
    templates/
      blog/
        base.html
        list.html
        detail.html
    static/
      css/
      js/
      …
    tests/
      __init__.py
      test_models.py
      test_managers.py
      test_views.py
  users/
    __init__.py
    models.py
    views.py
    urls.py
    templates/
      users/
        base.html
        list.html
        detail.html
    static/
      css/
      js/
      …
    tests/
      __init__.py
      test_models.py
      test_views.py
   static/
     css/
     js/
     …
   templates/
     base.html
     index.html
   requirements/
     base.txt
     dev.txt
     test.txt
     prod.txt

1. 每個應(yīng)用的目錄位置

最頂層的 myproject 目錄包含有 manage.py 文件,因此是項目的根目錄。 myproject/myproject/ 是項目的內(nèi)容目錄,項目的根 URL 配置文件, WSGI 配置文件都存放在這里面。

myproject/blog/ 和 myproject/users/ 是項目的兩個應(yīng)用所在的目錄,將 blog、 users 這兩個應(yīng)用的目錄與 myproject/myproject/ 平行放置,而不放置在 myproject/myproject/ 目錄內(nèi)的好處是: 之后要 import 應(yīng)用中的模塊時,比如 import blog 應(yīng)用中的 models 時,可以用 import blog.models,而不需要用 import myproject.blog.models,這樣也方便之后能將應(yīng)用獨立出來重用。

2. 為每個環(huán)境設(shè)置各自的配置信息

針對項目的各個環(huán)境,如本地開發(fā) dev、 內(nèi)部測試 stage、 自動化流程環(huán)境 jenkins 及生產(chǎn)環(huán)境 prod,分別創(chuàng)建獨立的配置文件。

  1. 在 myproject/myproject 目錄下新建一個 settings 目錄并在里面創(chuàng)建一個空的 __init__.py。
  2. 將 myproject/myproject/settings.py 文件搬到 myproject/myproject/settings/ 目錄下,并改名為 base.py,這個文件里面的配置信息被所有其它環(huán)境的配置文件所共享。
  3. 在 myproject/myproject/settings/ 目錄下分別創(chuàng)建 dev.py、stage.py、jenkins.py 和 prod.py 4 個文件,每個文件中包含如下的一行代碼:
from base import *

這樣,這些環(huán)境配置文件就能讀取默認(rèn)的配置項了,之后就能在各自的配置文件中設(shè)置定制的配置值了。比如本地開發(fā)環(huán)境,可以在 dev.py 中添加 DEBUG=True**, 而生產(chǎn)環(huán)境 **prod.py**,可以設(shè)置 DEBUG=False`。

指定使用哪個配置文件:

可以通過操作系統(tǒng)的環(huán)境變量指定,比如:

export DJANGO_SETTINGS_MODELS="myproject.settings.prod"

也可以通過命令行參數(shù)指定, 比如:

./manage.py migrate --settings=myproject.settings.prod

或者

gunicorn -w 4 -b 127.0.0.1:8001 --settings=myproject.settings.prod

3. 修改 INSTALLED_APPS

默認(rèn)的 INSTALLED_APPS 會是:

INSTALLED_APPS = (
  ...
)

可以將元組 () 改為列表 []:

INSTALLED_APPS = [
  ...
]

進(jìn)一步可以將 INSTALLED_APPS 中的第三方(內(nèi)置)的應(yīng)用與我們自己的應(yīng)用分開,如:

PREREQ_APPS = [
  ‘django.contrib.auth',
  ‘django.contrib.contenttypes',
  …
  ‘debug_toolbar',
  ‘imagekit',
  ‘haystack',
]

PROJECT_APPS = [
  ‘homepage',
  ‘users',
  ‘blog',
]

INSTALLED_APPS = PREREQ_APPS + PROJECT_APPS

這樣分開后,我們就可以只針對我們自己的應(yīng)用進(jìn)行 test 和 code coverage。

以上針對 INSTALLED_APPS 的修改也可以針對 TEMPLATE_DIRS 和 MIDDLEMARE_CLASSES 進(jìn)行。

4. 調(diào)整 pip requirements

項目一般都有一個 requirements.txt 文件,可以指定項目的依賴包,根據(jù)這個文件,可以用以下命令對依賴包進(jìn)行自動安裝:

pip install -r requirements.txt

在 requirements.txt 文件中可以用 -r filename 來包含進(jìn)另一個文件的內(nèi)容,這個功能和 C 語言中的 #include <filename.h> 類似。

因此,我們可以將通用的依賴信息保存在 myproject/requirements/base.txt 文件中,而針對不同的環(huán)境,比如測試環(huán)境,保存在另一個文件中,如 myproject/requirements/test.txt, 里面的內(nèi)容可能會是:

-r base.txt
pytest==2.5.2
coverage==3.7.1

5. 分割測試文件

在每個應(yīng)用中分別創(chuàng)建一個包含測試內(nèi)容的目錄 tests,將對應(yīng)不同類別的測試分別保存在不同的文件中,如 test_models.py、 test_views.py 等。這樣分配,比起將全部測試代碼放在單個文件中的好處是:代碼更易閱讀,同時還能減少在編輯器中上下翻滾的時間。

6. URL 配置文件

先各個應(yīng)用內(nèi)的 urls.py 保存各自的 URL 配置,然后在項目的根 URL 配置文件中,通過 include 命令將子應(yīng)用的 URL 配置信息包含進(jìn)行:

urlpatterns = patterns(‘',
  url(r'^$', HomePageView.as_view(), name=‘home'),
  url(r'^blog/‘, include(‘blog.urls')),
  url(r'^user/‘, include(‘users.urls')),
)

7. 模板和靜態(tài)文件

各個子應(yīng)用都應(yīng)該有各自的模板和靜態(tài)文件目錄,如 blog 的模板和靜態(tài)文件目錄位置應(yīng)該為: myproject/blog/templates/blog/ 和 myproject/blog/static/blog/ 。如果想對子應(yīng)用中的模板和靜態(tài)文件進(jìn)行覆蓋,可以通過在項目根模板和根靜態(tài)文件目錄中創(chuàng)建相同名字的文件進(jìn)行。比如要覆蓋 blog 中的 detail.html 模板,可以通過創(chuàng)建 myproject/templates/blog/detail.html 文件來對默認(rèn)的模板文件進(jìn)行覆蓋。

8. 重用子應(yīng)用

如果想在另一個項目中重用 blog 應(yīng)用,正確的方法是:

  1. 將 blog 應(yīng)用提取出來,創(chuàng)建一個獨立的代碼庫
  2. 在各個項目中,使用 pip install 的方式安裝 blog 應(yīng)用
  3. 在各個項目中,使用 pip 對依賴的 blog 進(jìn)行更新

參考文獻(xiàn): http://www.revsys.com/blog/2014/nov/21/recommended-django-project-layout/

到此這篇關(guān)于Django 項目布局方法(值得推薦)的文章就介紹到這了,更多相關(guān)Django 項目布局方法(值得推薦)內(nèi)容請搜索億速云以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持億速云!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI