2017.08.21
資料來源: (1)https://www.tutorialspoint.com/django/index.htm
(2)Writing your first Django app, part 1
(3)https://djangobook.com/the-django-book/
我們在前面己經安裝好了Portable Python 2.7.6.1後,在這個套件內有一個Django套件,而Django套件可以做什麼呢?
本篇用來記錄Django程式設計過程
什麼是Django ? 簡單地說Django就是用來開發設計Web的程式語言,各位讀者可以想像它就是 Web service架站+ASP(PHP)。
個人認為在專案開發中應用程式可分為GUI程式設計及Web程式設計,兩種應用程式使用類似但不同的設計框架,上層的框架架構或者有些不同,
但在下層的元件使用卻有些類似,但不管如何Django是一種可以用python語言來開發web 應用程式的設計架構。
MTV 架構 ( Model–Template–View )
Django 同樣使用了類似 MVC 的架構,只是在定義和解釋上略為不同,稱為 MTV ( Model–Template–View ),
首先我們要透過下面這張圖來了解其運作方式,這部份對於web程式設計是很重要的
(資料來源:http://blog.easylearning.guru/implementing-mtv-model-in-python-django/)
Model層是存取資料元件,而Template層是資料呈現層次,存放html等語法,view 是企業邏輯層,存放while if等指令。
最基本地流程如下,
- 瀏覽器送出 request(要求)給URLS
- Django 依據 URL configuration 分配至對應的 View
- View 進行操作或其他運算,並回傳一個Response(回應) 物件
- 瀏覽器依據 Response(回應) 物件顯示網頁畫面
其他的比較複雜的流程要依應用程式的複製度而加入不同的元件,例如網站需要使用到資料庫時我們就要加入model 層次的元件負責資料庫存取的工作。
檢查你的django和版本
python -m django --version
開始你的第一個Project
開一個cmd視窗,切換到 app/Scripts 所在目錄,在這個目錄下有一個django-admin.py 檔案
執行下面指令
python django-admin.py startproject <mysite name>
執行完後會產生下面的目錄結構
mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py
manage.py
: 一個命令列的公用程式,而這個公用程式可以用不同的方式與Django 專案互動,詳細設定方式在django-admin and manage.py.- 內層
mysite/
目錄是你的專案Python套件,它的名稱為程式中需要匯入的名稱 (e.g.mysite.urls
)。 內層mysite/__init__.py
: 一個空檔案,而這個檔案告訴Python,更多訊息請參考more about packages。內層mysite/settings.py
: Django 專案的設定及配置,如果這個application會被其它projects用到或透過django的database程式架構,
那要在settings.py當中設定database的相關資訊,透過django的程式架構,如果後端要更換資料庫系統會比較方便,可能改設定就好。
Django 專案的URL宣告,負責網站的路由。如果有多個applications,把所有的對應放在一起可能有些混亂,所以django網站上的tutorial建議在建立一個 server_name/app_name/urls.py 檔,然後在 server_name/server_name/urls.py 當中來引用。更多訊息請參考URL dispatcher.內層
mysite/urls.py:
: 一個為WSGI-compatible web servers to serve your project的進入點.更多訊息請參考 How to deploy with WSGI。內層
mysite/wsgi.py
決定Project Web 應用程式類型
在Django中,一個project即是一個Web應用程式,Project 要依據不同的工作型態而產生不同的目錄結構,而設定方式利用manage.py後的參數來操控不同的應用程式架構。使用方式如下:
python manage.py migrate
: 建立一個資料庫方案,執行 python manage.py migrate,會根據application的設定來建立資料庫。更多訊息請參考Django settings。python manage.py runserver [port]:
開始一個web serverpython manage.py startapp appname:
為專案建立一個新的app 應用程式python manage.py help
: 列出manage.py 所有用的指令
(1)建立你的第一個 app
一個app 是一個 Web應用程式,而web應用程式可做一個投票系統,一個志工系統..等等,而一個專案可以包括數個app
建立app 指令如下:
python manage.py startapp app_name
執行完後會產生下面的目錄結構
app name /
__init__.py
admin.py
models.py
view.py
test.py
(2)開啓你的第一個Web Server
python manage.py runserver
c:\python\App\Scripts\prj>python manage.py runserver
Validating models...
0 errors found
August 22, 2017 - 10:13:31
Django version 1.6.2, using settings 'prj.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
它會在你的本機開一個port 8000的web server,打開你的瀏覽器,輸入網址 http://127.0.0.1:8000/
,你應該可以看到這個Welcome to Django 的歡迎畫面:
(3)準備遇見你的Hello World View
我們開始在瀏覽器上呈現最簡單地訊息顯示,顯示出Hello World,,其中資料流程如下:
- 瀏覽器送出 HTTP request
- Django 依據 URL configuration 分配至對應的 View
- View 進行資料庫的操作或其他運算,並回傳
HttpResponse
物件 - 瀏覽器依據 HTTP response 顯示網頁畫面
(3.1)建立Hello World 的 View
請把 view 看成一個 function,輸入 HttpRequest
物件,並回傳 HttpResponse
物件,大致說明如下:
-
收到
HttpRequest
參數: Django 從網頁接收到 request 後,會將 request 中的資訊封裝產生一個 HttpRequest 物件,並當成第一個參數,傳入對應的 view function。 -
View 處理完後回傳一個
HttpResponse
物件: HttpResponse 物件裡面包含:HttpResponse.content
HttpResponse.status_code
…等訊息
所以請編輯你的app name / 下的view.py 內容如下:
# kaok/views.py
from django.http import HttpResponse
def hello_world(request):
return HttpResponse("Hello World!")
以上程式就是:
- 從
django.http
模組中引用HttpResponse
類別 - 定義
hello_world
這個 view - 當
hello_world
被呼叫時,輸入一個HttpRequest
物件,而回傳一個包含字串 Hello World! 的HttpResponse
物件。
(3.2)Django URL 設定
下一步即是要讓Django 知道URL 與 view 的對應關係。例如:當我們在瀏覽 http://127.0.0.1:8000/hello/ 時 ,hello_world()
這個 view function 要能夠被執行。而這個對應關係就被定義在 urls.py。
編輯你的mysite/ 下的urls.py 內容如下:
# kaok/urls.py
from django.conf.urls import include, url
from django.contrib import admin
from kaok.views import hello_world #Import view functions from kaok.app hello_world
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^hello/$', hello_world),
]
以上程式透過 url() function 傳入兩個參數 regex
, view
:
url(regex, view)
- regex -- 定義的 URL 規則
- 規則以 regular expression(正規表示式)來表達
r'^hello/$'
代表的是hello/
這種 URL
- view -- 對應的 view function
- 指的是
hello_world
這個 view
在這個URL 設定中必須使用到Regular Expressions,如果你没學過它,可能會不知道這是什麼東西,我個人建議花點時間去研究及熟悉它,它的功能很強很方便
學了它我保證你絕對不會後悔,很多地方或程式都有它的影子,如果現在不懂那就先複製-貼上吧!有興趣可看官方文件及找估狗大師了。
(3)測試 你的Hello World
在瀏覽器輸入 http://127.0.0.1:8000/hello/,你會看到網頁顯示我們在 HttpResponse 傳入的文字Hello World!。
如能走到這個地步,表示你的一些基本環境己經可以工作了,下面我們將更進一步設計比較複雜的網站內容。
留言列表