天天看點

9.Django MTV及Django模型

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之類。