要啟動 Django 項,請使用 django-adminstartproject命令,如下所示:清單 3 啟動項目1~ dev$ django-admin py startproject djpr
startproject
命令,如下所示:
1
|
~/dev$ django-admin.py startproject djproject |
上面這個命令會創(chuàng)建一個 djproject 目錄,其中包含了運行 Django 項目所需要的基本配置文件:
1
2
3
4
|
__init__.py manage.py settings.py urls.py |
對于這個項目來說,我們要構(gòu)建一個職位公告板應(yīng)用程序 “jobs”。要創(chuàng)建應(yīng)用程序,可以使用 manage.py
腳本,這是一個特定于項目的 django-admin.py 腳本,其中 settings.py 文件可以自動提供:
1
2
|
~/dev$ cd djproject ~/dev/djproject$ python manage.py startapp jobs |
這將創(chuàng)建一個應(yīng)用程序骨架,其中模型有一個 Python 模塊,視圖有另外一個 Python 模塊。jobs 目錄中包含以下文件:
1
2
3
|
__init__.py models.py views.py |
提供應(yīng)用程序在項目中的位置純粹是為新 Django 開發(fā)人員建立的一種慣例,并不是必需的。一旦開始在幾個項目中混合使用應(yīng)用程序,就可以將應(yīng)用程序放到自己的命名空間中,并使用設(shè)置和主 URL 文件將它們綁定在一起?,F(xiàn)在,請按照下面給出的步驟執(zhí)行操作。
為了使 Django 認識到新應(yīng)用程序的存在,還需要向 settings.py 文件中的 INSTALLED_APPS 添加一個條目。對于這個職位公告板應(yīng)用程序來說,我們必須添加字符串 djproject.jobs
:
1
2
3
4
5
6
7
|
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'djproject.jobs', ) |
Django 提供了自己的對象關(guān)系型數(shù)據(jù)映射組件(object-relational mapper,ORM)庫,它可以通過 Python 對象接口支持動態(tài)數(shù)據(jù)庫訪問。這個 Python 接口非常有用,功能十分強大,但如果需要,也可以靈活地不使用這個接口,而是直接使用 SQL。
ORM 目前提供了對 PostgreSQL、MySQL、SQLite 和 Microsoft® SQL 數(shù)據(jù)庫的支持。
這個例子使用 SQLite 作為后臺數(shù)據(jù)庫。SQLite 是一個輕量級數(shù)據(jù)庫,它不需要進行任何配置,自身能夠以一個簡單文件的形式存在于磁盤上。要使用 SQLite,可以簡單地使用 setuptools 來安裝 pysqlite(有關(guān) setuptools 的更多資料,尤其是有關(guān) easy_install
工具(需要單獨安裝)的資料,請參閱 參考資料):
easy_install pysqlite
在使用這個模型之前,需要在設(shè)置文件中對數(shù)據(jù)庫進行配置。SQLite 只需要指定數(shù)據(jù)庫引擎和數(shù)據(jù)庫名即可。
1
2
3
4
5
6
|
DATABASE_ENGINE = 'sqlite3' DATABASE_NAME = '/path/to/dev/djproject/database.db' DATABASE_USER = '' DATABASE_PASSWORD = '' DATABASE_HOST = '' DATABASE_PORT = '' |
這個職位公告板應(yīng)用程序有兩種類型的對象:Location 和 Job。Location 包含 city、state(可選)和 country 字段。Job 包含 location、title、description 和 publish date 字段。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
from django.db import models class Location(models.Model): city = models.CharField(maxlength=50) state = models.CharField(maxlength=50, null=True, blank=True) country = models.CharField(maxlength=50) def __str__(self): if self.state: return "%s, %s, %s" % (self.city, self.state, self.country) else: return "%s, %s" % (self.city, self.country) class Job(models.Model): pub_date = models.DateField() job_title = models.CharField(maxlength=50) job_description = models.TextField() location = models.ForeignKey(Location) def __str__(self): return "%s (%s)" % (self.job_title, self.location) |
__str__
方法是 Python 中的一個特殊類,它返回對象的字符串表示。Django 在 Admin 工具中顯示對象時廣泛地使用了這個方法。
要設(shè)置這個模型的模式,請返回 manage.py 的 sql
命令。此時模式尚未確定。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
~/dev/djproject$ python manage.py sql jobs BEGIN; CREATE TABLE "jobs_job" ( "id" integer NOT NULL PRIMARY KEY, "pub_date" date NOT NULL, "job_title" varchar(50) NOT NULL, "job_description" text NOT NULL, "location_id" integer NOT NULL ); CREATE TABLE "jobs_location" ( "id" integer NOT NULL PRIMARY KEY, "city" varchar(50) NOT NULL, "state" varchar(50) NULL, "country" varchar(50) NOT NULL ); COMMIT; |
為了初始化并安裝這個模型,請運行數(shù)據(jù)庫命令 syncdb
:
~/dev/djproject$ python manage.py syncdb
注意,syncdb
命令要求我們創(chuàng)建一個超級用戶帳號。這是因為 django.contrib.auth 應(yīng)用程序(提供基本的用戶身份驗證功能)默認情況下是在 INSTALLED_APPS 設(shè)置中提供的。超級用戶名和密碼用來登錄將在下一節(jié)介紹的管理工具。記住,這是 Django 的超級用戶,而不是系統(tǒng)的超級用戶。