Django實戰(2) 建立第乙個模型類

2022-09-13 02:39:12 字數 2677 閱讀 7890

從模型開始開發似乎是個好主意。一方面模型是整個應用的核心,實現了應用的業務資料和對業務資料進行操作的約束,而檢視和模板只是向使用者提供操作和展現這些資料的介面;另一方面模型相對於系統的其他部分更加穩定,將模型先確定下來有助於系統其他部分的實現。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》中的做法是先建立資料庫表:

drop

table

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...