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等指令。 
最基本地流程如下,

  1. 瀏覽器送出 request(要求)URLS
  2. Django 依據 URL configuration 分配至對應的 View
  3. View 進行操作或其他運算,並回傳一個Response(回應) 物件
  4. 瀏覽器依據 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的程式架構,如果後端要更換資料庫系統會比較方便,可能改設定就好。
  • 內層mysite/urls.py: Django 專案的URL宣告,負責網站的路由。如果有多個applications,把所有的對應放在一起可能有些混亂,所以django網站上的tutorial建議在建立一個 server_name/app_name/urls.py 檔,然後在 server_name/server_name/urls.py 當中來引用。更多訊息請參考URL dispatcher.
  • 內層mysite/wsgi.py: 一個為WSGI-compatible web servers to serve your project的進入點.更多訊息請參考 How to deploy with WSGI

決定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 server
  • python 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!")

 以上程式就是:

  1.  django.http 模組中引用 HttpResponse 類別
  2. 定義 hello_world 這個 view
  3.  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!。

 如能走到這個地步,表示你的一些基本環境己經可以工作了,下面我們將更進一步設計比較複雜的網站內容。

回Django Web 程式設計主目錄

 

arrow
arrow
    文章標籤
    Django Web程式設計
    全站熱搜

    stanley 發表在 痞客邦 留言(0) 人氣()