MTV
我們或許都聽說過MVC模式。MVC是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、資料、界面顯示分離的方法組織代碼。Django也有其設計模式,我們稱之為MTV。
- M 代表模型(Model) , 即資料存取層。 該層處理與資料相關的所有事務
- T 代表模闆(Template), 即表現層。 比如HTML
- V 代表視圖(View) , 即業務邏輯層。 我們編寫業務代碼的地方。
Django模型
在運作我們第一個項目的時候,并沒有涉及資料庫的操作,如果我們想建立一張表,那麼如何操作呢?我們可以在article/models.py下面進行操作。可能有的同學會說,models.py不是一個python檔案嗎?跟資料庫有什麼關系,因為Django的特殊性,是以我們可以使用對象關系映射(ORM,Object Relational Mapping),簡單的說就是用操作類的形式操作資料庫,那麼怎麼操作呢?我們使用blog進行舉例,假設blog有一張表,有标題、作者、文章内容、釋出時間組成,那麼我們如何在Django下面生成一張資料表呢?我們打開article/models.py檔案,輸入如下代碼:
from django.db import models
# Create your models here.
class Article(models.Model):
title = models.CharField(max_length=10, ) # 标題
author = models.CharField(max_length=10) # 作者
content = models.CharField(max_length=500) # 内容
我們建立一個Article類,繼承models.Model,定義四個字段:title、 author、 content date_publish,CharField、DateTimeField是字段的類型,除了這兩種,Django還有很多其它資料類型, 如下表:
類型 | 描述 |
---|---|
AutoField | 用于存放 integer 類型的數字。 |
BooleanField | 用于存放布爾類型的資料(Ture 或 False) |
CharField | 用于存放字元型的資料, 需要指定長度 max_length。 |
CommaSeparatedIntegerField | 用于存放用逗号隔開的 integer 類型的資料。 |
DateField | 日期型, 必須是“YYYY-MM-DD” 格式 |
DateTimeField | 日期時間型, 必須是"YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] "格式。 |
DecimalField | 小數型, 用于存放小數的數字。 |
EmailField | 電子郵件類型 |
FilePathField | 檔案路徑類類型, FilePathFields must have either 'allow_files' or 'allow_folders set to True. |
FloatField | 浮點型。 用于存放浮點型資料。 |
IntegerField | 用于存放 integer 類型的數字。 |
BigIntegerField | 用于存放大 integer 類型的數字, 最大數支援: 9223372036854775807 |
GenericIPAddressField | 存放 IP 位址的類型, IPv4 和 IPv6 位址, 字元串格式。 |
NullBooleanField | vlaue must be either None, True or False. |
PositiveIntegerField | Positive integer |
PositiveSmallIntegerField | Positive small integer |
SlugField | 需要定義 max_length 值。 |
SmallIntegerField | Small integer |
TextField | 用于存放文本類型的資料。 |
TimeField | 時間類型。 "HH:MM[:ss[.uuuuuu]]" 格式 |
URLField | 用于存放 URL 位址 |
BinaryField | Raw binary data |
但現在article還隻是一個類,不是一張表,是以我們要執行下面2個指令,執行資料庫遷移
F:\建立檔案夾\blog>python manage.py makemigrations article
Migrations for 'article':
article\migrations\0001_initial.py
- Create model Article
F:\建立檔案夾\blog>python manage.py migrate
Operations to perform:
Apply all migrations: admin, article, auth, contenttypes, sessions
Running migrations:
No migrations to apply.
python manage.py makemigrations article
相當于 在該app下建立 migrations目錄,并記錄下你所有的關于modes.py的改動,比如0001_initial.py, 但是這個改動還沒有作用到資料庫檔案
python manage.py migrate
将該改動作用到資料庫檔案,比如産生table之類。