每一個(gè) Django project 裡面可以有多個(gè) Django app,可以想成是類似模組的概念。在實(shí)務(wù)上,通常會(huì)依功能分成不同 app,方便未來(lái)的維護(hù)和重複使用。
例如,我們要做一個(gè)類似 Facebook 這種網(wǎng)站時(shí),依功能可能會(huì)有以下 App:
若未來(lái)我們需要寫個(gè)購(gòu)物網(wǎng)站,而需要會(huì)員功能時(shí),accounts app
(使用者管理) 就可以被重複使用。
這一章,你會(huì)學(xué)到如何使用 Django 命令列工具建立 Django project 和一個(gè) Django app。
首先,使用 django-admin.py
來(lái)建立第一個(gè) Django project mysite
:
django-admin.py startproject mysite
此時(shí)會(huì)多了一個(gè) mysite 資料夾,我們切換進(jìn)去
cd mysite
startproject
這個(gè) Django 指令除了建立專案資料夾,也預(yù)設(shè)會(huì)建立一些常用檔案,你可以使用 ls
或 dir /w
(Windows) 檢視檔案結(jié)構(gòu)。
目前 project 的檔案結(jié)構(gòu)如下:
mysite/
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
manage.py
是 Django 提供的命令列工具,我們可以利用它執(zhí)行很多工作,例如同步資料庫(kù)、建立 app 等等,指令的使用方式如下:
python manage.py <command> [options]
如果你想要了解有什麼指令可以使用,輸入help
或-h
指令會(huì)列出所有指令列表:
python manage.py -h
而如果想了解其中一個(gè)指令,可以在指令名字后輸入-h
,你會(huì)看到簡(jiǎn)單的的指令介紹以及用法說(shuō)明,以runserver
為例:
(VENV) ~/djangogirls/mysite$ python manage.py runserver -h
Usage: manage.py runserver [options] [optional port number, or ipaddr:port]
Starts a lightweight Web server for development and also serves static files.
Options:
-v VERBOSITY, --verbosity=VERBOSITY
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings=SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be
used.
--pythonpath=PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Raise on exception
--no-color Don't colorize the command output.
-6, --ipv6 Tells Django to use an IPv6 address.
--nothreading Tells Django to NOT use threading.
--noreload Tells Django to NOT use the auto-reloader.
--nostatic Tells Django to NOT automatically serve static files
at STATIC_URL.
--insecure Allows serving static files even if DEBUG is False.
--version show program's version number and exit
-h, --help show this help message and exit
從說(shuō)明中可以知道,runserver
會(huì)啟動(dòng)一個(gè)簡(jiǎn)單的 web server,方便于在開發(fā)階段使用:
(VENV) ~/djangogirls/mysite$ python manage.py runserver
...
Django version 1.7, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
現(xiàn)在打開瀏覽器輸入 http://127.0.0.1:8000/ 或是 http://localhost:8000/ 會(huì)看到你的 django 專案已成功在 web server 上執(zhí)行
最后我們可以按下 CTRL+C
,關(guān)閉 web server 回到命令列。
如果無(wú)法看到成功畫面,瀏覽器上顯示錯(cuò)誤訊息 - "A server error occurred. Please contact the administrator.",請(qǐng)輸入:
(VENV) ~/djangogirls/mysite$ python manage.py migrate
然后再次runserver
啟動(dòng)你的 web server,我們會(huì)在 Django Models 解釋migrate
的作用。
現(xiàn)在,讓我們利用 startapp
建立第一個(gè) Django app -- trips:
python manage.py startapp trips
startapp
會(huì)按照你的命名建立一個(gè)同名資料夾和 app 預(yù)設(shè)的檔案結(jié)構(gòu)如下:
trips
├── __init__.py
├── admin.py
├── migrations
├── models.py
├── tests.py
└── views.py
在前一個(gè)指令,我們透過(guò) Django 命令列工具建立了 trips 這個(gè) app。但若要讓 Django 知道要管理哪些 app,還需再調(diào)整設(shè)定檔。
打開 mysite/settings.py,找到 INSTALLED_APPS,調(diào)整如下:
# mysite/settings.py
...
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'trips',
)
請(qǐng)注意 app 之間有時(shí)候需要特定先后順序。在此,我們將自訂的trips
加在最后面。
預(yù)設(shè)安裝的 Django app
Django 已將常用的 app 設(shè)定為 INSTALLED_APPS
。例如,auth
(使用者認(rèn)證)、admin
(管理后臺(tái)) ...等等,我們可依需求自行增減。
目前為止,我們使用 startproject
建立了一個(gè)名為 mysite 的 django 專案,和一個(gè)名為 trips 的 django app
mysite
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── trips
│ ├── __init__.py
│ ├── admin.py
│ ├── migrations
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── manage.py
最后,我們回顧一下本章學(xué)到的指令
指令 | 說(shuō)明 |
---|---|
django-admin.py **startproject**<project_name>
|
建立 django 專案 |
python manage.py **-h**<command_name>
|
查看 django command 的使用方法 |
python manage.py runserver | 啟動(dòng)開發(fā)伺服器 |
python manage.py **startapp**<app_name>
|
新增 django app |
更多建議: