用騰訊雲 Cloud Studio 玩 Django
緣由
-
最近發現一個好用的東西 - 騰訊雲(Cloud Studio),可線上快速創建開發環境,編程並測試。
-
現在註冊可以免費使用 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
- 添加訪問連結
- setting.py 設定 ALLOWED_HOSTS
ALLOWED_HOSTS = ['*']
- 預設網頁歡迎畫面
- 增加 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),
]
- 目前的目錄架構
- 目前網頁畫面
模板 Template
- 回到 HelloWorld 專案根目錄,創建 templates 目錄,並建立 hello.html
cd ..
mkdir templates
cd templates/
echo > hello.html
- 目前目錄架構
- hello.html
<h1></h1>
- 修改 setting.py
'DIRS': [BASE_DIR+"/templates",],
- 修改 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),
]
- 新增 base.html
- 修改 hello.html
- 網頁畫面
建立 APP
- 在 Django 中要使用資料庫,必須先建立 APP
python manage.py startapp myAPP
- 修改 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
- 修改 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 就要同步資料庫的狀態
python manage.py migrate