從模型開始開發似乎是個好主意。一方面模型是整個應用的核心,實現了應用的業務資料和對業務資料進行操作的約束,而檢視和模板只是向使用者提供操作和展現這些資料的介面;另一方面模型相對於系統的其他部分更加穩定,將模型先確定下來有助於系統其他部分的實現。ddd(領域驅動設計)更進一步將模型中的核心物件抽取出來作為「領域模型」。
從depot應用來看,產品(product) 應該是模型中的核心物件之一。就讓我們先來實現product模型。
用python**定義資料庫
在《django的第一印象》中介紹過,django的設計是 以python類的形式定義資料模型。之所以沒有採用rails的執行時自動獲取資料庫schema的」魔術方式「,是出於以下的考慮:
1. 效率。執行時掃瞄資料庫可能會帶來效能問題。
2. 明確性。只通過model類就完全知道資料庫中有哪些字段,而不需要再切換到migration或schema檔案中去檢視,更不需要去檢視資料庫結構。
3. 一致性。你看到的只是python**,完全不需要將大腦切換到」資料庫模式「,能極大提高開發效率。
4. 版本控制。rails中的資料庫結構版本儲存在乙個個的migration檔案中,這簡直就是版本管理的」反模式「。django的方式是管理model**檔案的版本。
5. 可擴充套件性。可以定義資料庫中不存在的」字段型別「。比如email,url,等等。
當然,django也提供從現有資料庫表中自動掃瞄生成模型的工具。
so,《agile web development with rails》中的做法是先建立資料庫表:
droptable
ifexists
products;
create
table
products (
id int
notnull
auto_increment,
title
varchar(100) not
null
, description
text
notnull
, image_url
varchar(200) not
null
, price
decimal(10,2) not
null
, primary
key(id)
);
然後再生成scaffold(包括model,controller,test,4個views等等)。
而django的做法是,編寫下面的model類:
from django.db import
models
class
product(models.model):
title = models.charfield(max_length=100)
description =models.textfield()
image_url = models.charfield(max_length=200)
price = models.decimalfield(max_digits=8,decimal_places=2)
如同其他的orm,id欄位是預設宣告的,不需要單獨處理.
部署模型
databases =}
就完成了資料庫的配置。
#'django.contrib.auth',
#'django.contrib.contenttypes',
#'django.contrib.sessions',
#'django.contrib.sites',
#'django.contrib.messages',
#'django.contrib.staticfiles',
#uncomment the next line to enable the admin:
#'django.contrib.admin',
#uncomment the next line to enable admin documentation:
#'django.contrib.admindocs', ''
, )
接下來就可以使用模型了。先驗證一下:
$python manage.py validate
0 errors found
然後可以看一下這個model將會生成什麼樣的資料庫:
begin;
"id" integer not null primary key,
"title" varchar(100) not null,
"description" text not null,
"image_url" varchar(200) not null,
"price" decimal not null);
commit;
最後,將模型匯入資料庫:
$ python manage.py syncdb
creating tables ...
installing custom sql ...
installing indexes ...
no fixtures found.
至此,完成了第乙個模型類的建立。
Django實戰(2) 建立第乙個模型類
從模型開始開發似乎是個好主意。一方面模型是整個應用的核心,實現了應用的業務資料和對業務資料進行操作的約束,而檢視和模板只是向使用者提供操作和展現這些資料的介面 另一方面模型相對於系統的其他部分更加穩定,將模型先確定下來有助於系統其他部分的實現。ddd 領域驅動設計 更進一步將模型中的核心物件抽取出來...
Django實戰(2) 建立第乙個模型類
從模型開始開發似乎是個好主意。一方面模型是整個應用的核心,實現了應用的業務資料和對業務資料進行操作的約束,而檢視和模板只是向使用者提供操作和展現這些資料的介面 另一方面模型相對於系統的其他部分更加穩定,將模型先確定下來有助於系統其他部分的實現。ddd 領域驅動設計 更進一步將模型中的核心物件抽取出來...
建立第乙個Django工程
建立第乙個django工程 django環境算是配置完成了,你可以到命令提示符下建立第乙個django應用,進入某個目錄,執行django admin.py startproject myproject來建立乙個工程 這時在myproject目錄下有乙個資料夾myproject和乙個manage.p...