iT邦幫忙

DAY 3
0

為程式人寫的 Django Tutorial系列 第 3

Django Tutorial for Programmers: 3. Django Project

希望你還記得我們前天做了什麼。

首先,找到你之前建立的 lunch 目錄,cd 進去,然後啟用虛擬環境。接著用以下的指令建立新專案

django-admin startproject lunch

這會在目前的目錄下建立一個 lunch 目錄,裡面包含所有專案需要的檔案。

你現在的檔案結構應該會類似這樣(最外面的 lunch 是我們前天建的,最外層的目錄):

lunch
├── lunch
│   ├── lunch
│   │   ├── __init__.py
│   │   ├── settings.py
│   │   ├── urls.py
│   │   └── wsgi.py
│   └── manage.py
└── venv
    └── lunch
        └── [裡面是虛擬環境,略]  

第二個 lunch 是由 django-admin 指令建立的,你的專案目錄。所有專案相關的東西都應該要在這個目錄裡面;如果你未來想要把這個專案放進版本控制系統,這應該就是專案的根目錄。注意不是最外面那個!一般不建議把虛擬環境放進版本控制。

在 lunch 專案裡有一個檔案 manage.py,以及一個與專案同名的目錄。前者的用途看名字大概也能猜到,是用來管理你的專案;我們之後用到的時候再來慢慢解釋。後者(第三層的 lunch)則是用來存放專案共用的檔案。我們來看看裡面各檔案的作用:

  1. __init__.py:Python 用來標示某個目錄是 module 的檔案。lunch 裡面有這個檔案,就代表 lunch 本身是個合法的 Python module,其他程式可以用 import 把它載入。

  2. settings.py:顧名思義,這個檔案是用來存放 lunch 這個專案的設定。Django 的設定檔其實就是一個 Python 檔,裡面的變數會被當作設定值。除了你現在在 settings.py 裡看得到的內容外,Django 其實還有很多預設值。完整的 Django 設定列表可以在官網文件找到;如果某個設定值在設定檔裡沒有,則會使用內建的預設值。Django 在很多地方都提供了合理的預設值,所以在設定檔裡需要修改的項目並不多。我們之後會回來處理必要的設定。

  3. urls.py:當伺服器收到網路要求時,要求裡面會有一個路徑資訊,也就是你在使用瀏覽器時看到的那個網址。這個檔案的內容是用來告訴 Django,當它收到某個(或某些)路徑的要求時,應該要呼叫哪個函式來處理。我們之後會再回來詳細討論路徑,以及 Django 怎麼把它對應到函式。

  4. wsgi.py:如果你還記得昨天的內容,應該可以猜到它的作用。這個檔案就是讓你的 Django 專案變成 WSGI 應用程式的關鍵。當 WSGI 伺服器收到請求時,就會執行這個檔案,以獲得一個 WSGI 應用程式。

我們來看看 wsgi.py 的內容:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lunch.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

檔案前面有一串 docstring,用來解釋這個檔案的用途,這裡省略。這個檔案分成兩個部分。上面兩行是用來指定專案設定檔位置。在預設狀況下,我們的檔案是放在 lunch module 裡面的 settings.py,所以這邊設定成 lunch.settings。

這個設定檔路徑用 os.environ 被設定到環境變數 DJANGO_SETTINGS_MODULE 裡。接著 Django 導入一個 WSGI application,並執行它。當這個 WSGI 應用被執行時,會讀取我們剛剛設定的 DJANGO_SETTINGS_MODULE 環境變數,並依此找到設定檔來使用。這也代表,如果我們不想使用 lunch.settings 當我們的設定檔,只要把環境變數設成其他值就可以了!請記住這個概念,我們之後會用到。

不過今天先到這裡。我們明天會把專案設定完成,讓它可以執行。


上一篇
Django Tutorial for Programmers: 2. 談 Django
下一篇
Django Tutorial for Programmers: 4. 執行專案
系列文
為程式人寫的 Django Tutorial30

1 則留言

0
Ivan
iT邦新手 5 級 ‧ 2014-12-04 17:08:04

請問要在虛擬環境下執行

<pre class="c" name="code">(lunch) C:\lunch> django-admin startproject lunch

還是不要在虛擬環境下執行該指令呢?
謝謝~~

我要留言

立即登入留言