Project and apps
Project and apps
每一个 Django project 裡面可以有多个 Django app,可以想成是类似模组的概念。在实务上,通常会依功能分成不同 app,方便未来的维护和重複使用。
例如,我们要做一个类似 Facebook 这种网站时,依功能可能会有以下 App:
- 使用者管理 -- accounts
- 好友管理 -- friends
- 涂鸦墙管理 -- timeline
- 动态消息管理 -- news
若未来我们需要写个购物网站,而需要会员功能时,accounts app
(使用者管理) 就可以被重複使用。
这一章,你会学到如何使用 Django 命令列工具建立 Django project 和一个 Django app。
建立 Django project
建立专案资料夹 -- startproject
首先,使用 django-admin.py
来建立第一个 Django project mysite
:
django-admin.py startproject mysite
此时会多了一个 mysite 资料夹,我们切换进去
cd mysite
startproject
这个 Django 指令除了建立专案资料夹,也预设会建立一些常用档案,你可以使用 ls
或 dir /w
(Windows) 检视档案结构。
目前 project 的档案结构如下:
mysite/
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
瞭解 Django Command
manage.py
是 Django 提供的命令列工具,我们可以利用它执行很多工作,例如同步资料库、建立 app 等等,指令的使用方式如下:
python manage.py <command> [options]
如果你想要了解有什麽指令可以使用,输入help
或-h
指令会列出所有指令列表:
python manage.py -h
而如果想了解其中一个指令,可以在指令名字后输入-h
,你会看到简单的的指令介绍以及用法说明,以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
启动开发服务器 -- runserver
从说明中可以知道,runserver
会启动一个简单的 web server,方便于在开发阶段使用:
(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.
现在打开浏览器输入 http://127.0.0.1:8000/ 或是 http://localhost:8000/ 会看到你的 django 专案已成功在 web server 上执行
最后我们可以按下 CTRL+C
,关闭 web server 回到命令列。
如果无法看到成功画面,浏览器上显示错误讯息 - "A server error occurred. Please contact the administrator.",请输入:
(VENV) ~/djangogirls/mysite$ python manage.py migrate
然后再次runserver
启动你的 web server,我们会在 Django Models 解释migrate
的作用。
建立 Django application (app)
现在,让我们利用 startapp
建立第一个 Django app -- trips:
python manage.py startapp trips
startapp
会按照你的命名建立一个同名资料夹和 app 预设的档案结构如下:
trips
├── __init__.py
├── admin.py
├── migrations
├── models.py
├── tests.py
└── views.py
将新增的 Django app 加入设定档
在前一个指令,我们透过 Django 命令列工具建立了 trips 这个 app。但若要让 Django 知道要管理哪些 app,还需再调整设定档。
新增 app
打开 mysite/settings.py,找到 INSTALLED_APPS,调整如下:
# 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',
)
请注意 app 之间有时候需要特定先后顺序。在此,我们将自订的trips
加在最后面。
预设安装的 Django app
Django 已将常用的 app 设定为 INSTALLED_APPS
。例如,auth
(使用者认证)、admin
(管理后台) ...等等,我们可依需求自行增减。
小结
目前为止,我们使用 startproject
建立了一个名为 mysite 的 django 专案,和一个名为 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
最后,我们回顾一下本章学到的指令
指令 | 说明 |
---|---|
django-admin.py **startproject**<project_name>
|
建立 django 专案 |
python manage.py **-h**<command_name>
|
查看 django command 的使用方法 |
python manage.py runserver | 启动开发伺服器 |
python manage.py **startapp**<app_name>
|
新增 django app |
更多建议: