回上方

與資料庫互動

我們建立一個簡單的線上投票網站當成範例。

在終端機中按下 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)

修改完成後重新載入管理介面,應該會看到上面出現 PollOption 的管理界面,我們可以在這個管理後台做新增、讀取、編輯、刪除的動作了。

點選 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)

  • 淡水老街吃吃喝喝養豬行程
  • 大稻埕文化巡訪文青行程
  • 陽明山賞花趣拈花惹草行程