緣由

  • 最近發現一個好用的東西 - 騰訊雲(Cloud Studio),可線上快速創建開發環境,編程並測試。

  • 現在註冊可以免費使用 180 天。

180

  • 今天就嘗試用 Cloud Studio 來玩 Django 吧!

  • Django 是一個開放原始程式碼的 Web 框架,由 Python 寫成。

起手式步驟

  • 在 Cloud Studio 安裝 Django
python -m pip install --upgrade pip setuptools

python -m pip install django
  • 利用查看版本指令,檢查是否安裝成功
django-admin --version
  • 建立專案
django-admin startproject HelloWorld
  • 切換到專案目錄
cd HelloWorld/
  • 啟動服務
python manage.py runserver 0.0.0.0:8080

runserver

  • 添加訪問連結

addlink

  • setting.py 設定 ALLOWED_HOSTS
ALLOWED_HOSTS = ['*']

ALLOWED_HOSTS

  • 預設網頁歡迎畫面

welcome

  • 增加 view.py
cd HelloWorld/
echo > view.py
  • view.py 程式碼
from django.http import HttpResponse
 
def hello(request):
    return HttpResponse("Hello world ! ")
  • 修改 HelloWorld/HelloWorld/urls.py
from django.conf.urls import url
 
from . import view
 
urlpatterns = [
    url(r'^$', view.hello),
]
  • 目前的目錄架構

folder

  • 目前網頁畫面

new

模板 Template

  • 回到 HelloWorld 專案根目錄,創建 templates 目錄,並建立 hello.html
cd ..
mkdir templates
cd templates/
echo > hello.html
  • 目前目錄架構

folder

  • hello.html
<h1></h1>
  • 修改 setting.py
'DIRS': [BASE_DIR+"/templates",],

setting.py

  • 修改 view.py
from django.shortcuts import render
 
def hello(request):
    context          = {}
    context['hello'] = 'Hello World!'
    return render(request, 'hello.html', context)
  • 修改 urls.py 調整 Router
from django.conf.urls import url
 
from . import view

urlpatterns = [
    url(r'^hello$', view.hello),
]

new link

  • 新增 base.html

base.html

  • 修改 hello.html

hello.html

  • 網頁畫面

new

建立 APP

  • 在 Django 中要使用資料庫,必須先建立 APP
python manage.py startapp myAPP

APP folder

  • 修改 settings.py
INSTALLED_APPS = [
    'myAPP', # 加入這個
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

資料庫

  • Django 預設資料庫使用 db.sqlite3,在 setting.py 可看到
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
  • 利用 Migration 把資料庫的 table 建出來。
python manage.py migrate

Migration

  • 修改 myAPP/models.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
from django.utils.timezone import now

class Member(models.Model):
    name = models.CharField(max_length=256)
    group_name = models.CharField(max_length=256)

    def __str__(self):
        return '%s of %s' % (self.name, self.group_name)


class History(models.Model):
    member = models.ForeignKey(Member, related_name="draw_histories")
    # now() will return datetime.utcnow()
    time = models.DateTimeField(default=now)

    def __str__(self):
        return '%s at %s' % (self.member.name, self.time)
  • Migration the tracker of model changes

每次更動 database model 都要跑 migration,確保 code 與資料庫狀態一致。

python manage.py makemigrations myAPP

Migration the tracker of model changes

  • 有了新的 migration 就要同步資料庫的狀態
python manage.py migrate

migrate

參考