與資料庫互動
我們建立一個簡單的線上投票網站當成範例。
在終端機中按下 Ctrl + C 中斷程式執行,回到命令提示模式。
建立專案與應用程式
(1)在終端機中下達指令建立一個新的專案
django-admin.py startproject poll
打完指令後,會產生一個 poll
的資料夾
poll/
manage.py
poll/
__init__.py
settings.py
urls.py
wsgi.py
(2)建立一個應用程式
cd poll
python manage.py startapp default
調整專案設定值
修改 poll/poll/settings.py
ALLOWED_HOSTS = ['*']
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'default',
]
另外,同一個檔案 poll/poll/settings.py
底下還有部份要修改的設定值:
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
LANGUAGE_CODE = 'zh-hant'
TIME_ZONE = 'Asia/Taipei'
建立資料模型
修改 poll/default/models.py
from django.db import models
# Create your models here.
class Poll(models.Model):
# 投票主題文字,至多 200 字
subject = models.CharField(max_length=200)
# 投票建立日期,在建立時若未指定,則自動填入建立時的時間
date_created = models.DateField(auto_now_add=True)
class Option(models.Model):
# 此選項屬於哪一個投票
poll_id = models.IntegerField()
# 選項文字
title = models.CharField(max_length=200)
# 此選項被投票數
count = models.IntegerField(default=0)
執行以下指令建立資料庫
sudo python manage.py makemigrations
sudo python manage.py migrate
sudo python manage.py createsuperuser
連結網站管理頁面
開啟網站服務
sudo python manage.py runserver 0:80
請在瀏覽器中輸入以下網址,以後入 Django 內建的管理後臺
http://your-host-address/admin
(註:your-host-address
請自行置換為執行專案的主機位址)
輸入超級管理員的帳號密碼後,登入網站管理後臺
將自訂資料模型也納入內建管理後臺
修改 poll/default/admin.py
from django.contrib import admin
from .models import *
# Register your models here.
admin.site.register(Poll)
admin.site.register(Option)
修改完成後重新載入管理介面,應該會看到上面出現 Poll
跟 Option
的管理界面,我們可以在這個管理後台做新增、讀取、編輯、刪除的動作了。
點選 Polls
後面的「新增」連結來建立 2 個投票主題(Poll):
- 趕快來投票決定班遊地點!!!
- 同樂會最想吃什麼?
新增投票主題後會自動轉至投票主題列表的畫面,這時出現的文字是 Poll Object
,如果我們希望出現有意義的內容,須在 model.py
中加入程式碼 第11-12, 22-23行
from django.db import models
# Create your models here.
class Poll(models.Model):
# 投票主題文字,至多 200 字
subject = models.CharField(max_length=200)
# 投票建立日期,在建立時若未指定,則自動填入建立時的時間
date_created = models.DateField(auto_now_add=True)
def __str__(self):
return str(self.id) + ")" + self.subject
class Option(models.Model):
# 此選項屬於哪一個投票
poll_id = models.IntegerField()
# 選項文字
title = models.CharField(max_length=200)
# 此選項被投票數
count = models.IntegerField(default=0)
def __str__(self):
return str(self.poll_id) + ": " + self.title
接著為投票主題「趕快來投票決定班遊地點!!!」,新增投票選項,記得要指定 Poll id
的值為 1
(因為該投票主題的 id
值為 1
)
- 淡水老街吃吃喝喝養豬行程
- 大稻埕文化巡訪文青行程
- 陽明山賞花趣拈花惹草行程