1. 程式人生 > >Django學習之路-3使用模型

Django學習之路-3使用模型

模型理解

模型抽象了資料的構成、訪問和資料之間的邏輯關係,資料庫是一個獨立於python的東西,Django使用一些類來和資料庫打交道,那麼這些類就是model的本質,那麼這些類就會定義資料庫的資料、對資料的訪問和操作。所以model是Django和資料庫的轉介面。

  • ORM:ObjectRelationMap,model負責構建資料庫表和互動

  • 應用的model類對應表,類中的屬性對應表字段 - 所有class都是models.Model的子類 - 所有屬性型別都是model.xxx,不能使用其他資料型別

  • Django自帶資料庫sqllite3(關係型、輕量級),不需要任何配置

  • 某大神建議:開發時候使用sqlite3,部署的時候使用mysql或oracle等 - 配置其他資料庫修改settings.py即可,如mysql DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '資料庫名稱', 'PASSWORD':'資料庫密碼', 'HOST':'127.0.0.1', 'PORT':'3306', } }

    - 如果是其他的資料庫,那麼ENGINE還有:‘django.db.backends.sqlite3’,‘django.db.backends.postgresql’,‘django.db.backends.mysql’,或 ‘django.db.backends.oracle’ - 在__init__.py檔案中,匯入pymysql包: import pymysql pymysql.install_as_MySQLdb()

  • 系統在預設開啟的某些應用需要至少一個數據表,比如,儲存類似cookie、session等,所以,在使用他們之前需要在資料庫中建立一些表。請執行以下命令:

$ 	python manage.py migrate

settings.py是一個配置檔案,大概如下:

  • INSTALLED_APPS 預設包括了以下 Django 的自帶應用: - django.contrib.admin – 管理員站點, 你很快就會使用它。 - django.contrib.auth – 認證授權系統。 - django.contrib.contenttypes – 內容型別框架。 - django.contrib.sessions – 會話框架。 - django.contrib.messages – 訊息框架。 - django.contrib.staticfiles – 管理靜態檔案的框架。 -
  • (後面的等學習get後,在更新吧…)

使用model

  • 必須使用model類 from django.db import models
  • 應用的model.py的類對應表,類中的屬性對應表字段 - 所有class都是models.Model的子類 - 每個欄位都是 Field 類的例項 - 所有屬性型別都是model.xxx,不能使用其他資料型別
  • 欄位常用引數 - max_length:規定數值最大長度 - blank:欄位是否可以為空,預設False - null:欄位是否可以儲存為null,預設False - default:預設值 - unique:是否唯一 - verbose_name:假名

建立model

  • 在這個簡單的投票應用中,需要建立兩個模型:問題 Question 和選項 Choice。Question 模型包括問題描述和釋出時間。Choice 模型有兩個欄位,選項描述和當前得票數。每個選項屬於一個問題。
  • 編寫polls/models.py
from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
  • 每個模型被表示為 django.db.models.Model 類的子類
  • 每個變數都是 Field 類的例項,都表示為資料庫的欄位
  • 使用 ForeignKey 定義了一個關係,每個 Choice 物件都關聯到一個 Question 物件

資料庫生成

  • 啟用模型 為了在我們的工程中包含這個應用,我們需要在配置類 INSTALLED_APPS 中新增設定。因為 PollsConfig 類寫在檔案 polls/apps.py 中,所以它的點式路徑是 ‘polls.apps.PollsConfig’。在檔案 mysite/settings.py 中 INSTALLED_APPS 子項新增點式路徑
INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
  • 模型遷移 通過執行 makemigrations 命令,Django 會檢測你對模型檔案的修改(在這種情況下,你已經取得了新的),並且把修改的部分儲存為一次 遷移。
$ python manage.py makemigrations 應用名
  • 閱讀遷移 遷移是 Django 對於模型定義(也就是你的資料庫結構)的變化的儲存形式,它們其實也只是一些你磁碟上的檔案,它被儲存在polls/migrations/0001_initial.py 裡,或者你可以執行下面命令,檢視遷移好的sql語句
python manage.py sqlmigrate polls 0001
  • 建立資料表 這個 migrate 命令選中所有還沒有執行過的遷移(Django 通過在資料庫中建立一個特殊的表 django_migrations 來跟蹤執行過哪些遷移)並應用在資料庫上 - 也就是將你對模型的更改同步到資料庫結構上
$ python manage.py migrate
  • 所以總結一下 - 編輯 models.py 檔案,改變模型。 - 執行 python manage.py makemigrations 為模型的改變生成遷移檔案。 - 執行 python manage.py migrate 來應用資料庫遷移。

shell除錯資料庫

$ 	python manage.py shell