本篇将介紹Django如何建立資料庫,如何創造你的第一個模型,還會接觸到Django自帶的背景管理系統,
打開 demo_proj/settings.py,Django 項目的配置都在此。
Python 内置了 SQLite,你無需安裝就可以使用它,但當你開始一個真正的項目時,你可能更傾向使用一個更具擴充性的資料庫,例如 MySQL, 在配置檔案中使用 SQLite 作為預設資料庫,我們的示範也用SQLite。以下就是資料庫的配置項:

<code>ENGINE</code>
資料庫引擎,看你是選擇哪種資料庫,是SQLite,或者 是MySQL,還是其他,可選值有
<code>name</code>
資料庫名稱,如果是 SQLite,資料庫将是你電腦上的一個檔案,那麼, NAME 應該是此檔案的絕對路徑,包括檔案名。預設值 os.path.join(BASE_DIR, 'db.sqlite3') 将會把資料庫檔案儲存在項目的根目錄。
Django是通過 <code>migrate</code>指令來檢查 settings.py 檔案中的 INSTALLED_APP 配置項,為其中的每個應用建立資料表的。
先來關注下 <code>INSTALLED_APP</code>配置項,我們在Django項目中所有的應用對會包括在此(上篇文章建立的 <code>demo_app</code>也要手動加到這配置項裡)。通常 <code>INSTALLED_APP</code>會預設包括以下自帶的應用
這些應用被預設啟用是為了給項目提供友善,比如 <code>django.contrib.admin</code>會幫你建立個管理背景, <code>django.contrib.auth</code>會極大友善登入驗證,等等,後續我們會陸續介紹到。這些應用都需要資料表,比如 <code>django.contrib.admin</code>是背景管理,那麼就必須要有背景管理者。那麼就要求資料庫中必須有類似user表的來維護管理者資料。
Django 通過 <code>migrate</code>指令 根據 不同的app 來建立不同的表,執行指令
當看到 如下回報就表示執行成功:
我們可以檢視資料庫,會發現多了許多的表,如圖所示:
模型是真實資料的簡單明确的描述,它包含了存儲的資料所必要的字段和行為。每一個模型映射一個資料庫表,一般都寫在 <code>models.py</code>中。
打開 <code>demo_app</code>中的models.py 檔案,修改代碼如下:
在Cat 類 我們定義了 <code>__str__()</code>方法,這個方法用來有什麼作用,大家可以自己找找答案。
那我們如何把我們剛建的Cat類映射到資料表中呢?執行如下指令即可:
我們檢視資料庫,會發現了多了Cat這個表
這樣,我們建立的模型就和資料庫中的表建立起了映射關系了。那我們如何操作模型呢,也就是我們如何實作對資料庫進行增删改查操作呢?Django 為我們提供了各種API,我們進入互動式Python指令行來體驗下:
至此,Django如何配置資料庫,如何建立model,如何把model映射到資料庫中以及對model的操作我們都以熟悉了下,我們将在後面的課程中的更加深入的介紹model的一些用法。
Django 為我們提供了功能強大的背景。在背景中,我們可以利用Django自帶的功能對定義的對象進行添加,修改,和删除。
要登入到背景,首先必須有管理者賬戶,運作如下指令:
啟動我們的工程,在浏覽器中輸入 <code>http://127.0.0.1:8000/admin/</code>,系統會跳轉到背景系統的登入頁面:
輸入我們剛才建立的管理者賬号和密碼,我們會進入到背景管理系統的索引頁
我們剛才建立的Cat類在哪裡呢?别急,要想在背景看到這個類還得告訴背景系統,Cat類需要被管理,打開 <code>demo_app</code>/admin.py 檔案:
重新整理頁面,就可以看到我們定義的Cat類了:
點選Cat,系統就會跳轉的Cat 對象的清單頁面,我們剛才示範的操作API 建立的 Cat 對象也在此
點選 miaomiao 就進入到編輯頁面
編輯和删除功能都能實作。
在介紹了上面的内容之後,我再來補充介紹下常用的Djano字段類型。
models.AutoField :預設會生成一個名稱為 id 的列,如果要顯示的自定義一個自增列,必須将給列設定為主鍵 primary_key=True。
models.NullBooleanField :允許 NULL 作為其中一個選項。推薦使用這個字段而不要用 BooleanField 加 null=True 選項。admin 用一個選擇框, <select> (三個可選擇的值:“Unknown”, “Yes” 和 “No” ) 來表示這種字段資料。
models.Decimal:必須指定整數位<code>max_digits</code>和小數位<code>decimal_places</code>
models.DateField:對于參數,<code>auto_now = True</code> 則每次更新都會更新這個時間;<code>auto_now_add</code> 則隻是第一次建立添加,之後的更新不再改變。同(models.DateTimeField)