大多數網站,都會加上一些與使用者互動的功能,如留言版、討論區、投票等等。而這些使用者產出的資料,往往會儲存於資料庫中。本章,我將會介紹如何利用 Django Model 定義資料庫的結構(schema),並透過 Django 指令創建資料庫、資料表及欄位。
Models
使用Django Model
使用 Django Model 的來操作資料庫的優點之一,就是資料庫轉換相當方便。在大部份情況下,不再需要為不同的資料庫,使用不同語法來撰寫程式。只要修改設定,就可以輕易地從 SQLite 轉換到 MySQL、PostgreSQL、或是 Oracle 等等。
設定資料庫
為了開發方便,我們使用 Python 預設的資料庫引擎 — SQLite。打開 mysite/settings.py
,看看 DATABASES
的設定。它應該長得像下面這樣:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
在這裡我們設定了資料庫連線的預設值:
- ENGINE — 你要使用的資料庫引擎。例如:
- MySQL:
django.db.backends.mysql
- SQLite 3:
django.db.backends.sqlite3
- PostgreSQL:
django.db.backends.postgresql_psycopg2
- NAME — 你的資料庫名稱
如果你使用 MySQL 或 PostgreSQL 等等資料庫,可能還要設定它的位置、名稱、使用者等等。不過我們這裡使用的 SQLite 3 不需要這些性質,所以可以省略。
Django Model
我們在 trips/models.py
宣告一個 Post
類別,並定義裡面的屬性,而 Django 會依據這個建立資料表,以及資料表裡的欄位設定:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField(blank=True)
photo = models.URLField(blank=True)
location = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
- Django 預設會為每一個 Model 加上
id
欄位,並將這個欄位設成 primary key(主鍵),簡稱 pk,讓每一筆資料都會有一個獨一無二的 ID。 - 為 Post 定義以下屬性:
- Model fields 可為 Django Model 定義不同型態的屬性。
- CharField — 字串欄位,適合像 title、location 這種有長度限制的字串。
- TextField — 合放大量文字的欄位
- URLField — URL 設計的欄位
- DateTimeField — 日期與時間的欄位,使用時會轉成 Python
datetime
型別。
更多 Model Field 與其參數,請參考 Django 文件
同步資料庫
首先執行 makemigrations
指令:
migrate
指令會根據 INSTALLED_APPS
的設定,按照 app 順序建立或更新資料表,將你在 models.py 裡的更新跟資料庫同步。
Admin
設定管理後臺,讓管理者可新增或更動網站内容。
Django 有内建的App: Django Admin
本文前半段介紹如何使用Django Model抽象地表達資料庫結構,現在我們要透過 Django Admin 看到實際的資料,並跟資料庫互動。
下述範例將介紹
1. 如何設定 Django Admin
2. 使用 Django 管理後臺
3.完成 Post 新增、修改、刪除
設定管理後臺
將 Django Admin 加入 INSTALLED_APPS
管理後臺的功能已經預設被開啓,因此設定檔案 settings.py 中已經有django.contrib.admin
這個 App.
設定管理後臺的 URL
爲了讓我們可以從瀏覽器進入管理後臺,需要設定對應的 URLS
將管理後臺的網址設定成 /admin/
。確認 mysite/urls.py
中的 mysite/urls.py
包含:
url(r'^admin/', include(admin.site.urls)),
建立 superuser
要使用Django的管理後臺,需建立一個管理員帳號。
使用 createsuperuser 這個指令,建立一個 superuser
(djangogirls_venv) ~/djangogirls/mysite$ python manage.py createsuperuser
Username (leave blank to use 'YOUR_NAME'):
Email address: your_name@yourmail.com
Password:
Password (again):
Superuser created successfully.
問題:
管理後臺頁面中沒有出現POST:
(下一章節將採用下面連接所用的starapp 方式建立一個 trips的資料夾,該資料夾將包含views.py, models.py, admin.py )
https://djangogirlstaipei.gitbooks.io/django-girls-taipei-tutorial/django/admin.html
參考資料:官方網站, Tutorial, Python Django 快速入門教學:打造食譜分享社群網站, django girls 學習指南