技術筆記:Django(四)

Alice Lee
6 min readMar 6, 2018

--

大多數網站,都會加上一些與使用者互動的功能,如留言版、討論區、投票等等。而這些使用者產出的資料,往往會儲存於資料庫中。本章,我將會介紹如何利用 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合放大量文字的欄位
  • URLFieldURL 設計的欄位
  • 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 學習指南

--

--

Alice Lee

I am an engineer in Information Innovation Center department of Getac company. I was graduate from National Taiwan University.