iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 10
2
Modern Web

🍐放學後的網頁開發系列 第 10

[Day10] 柚子放學後的網頁生活 - View & Urls

從上堂課我們知道如何架設Django的環境,並開啟一個專案,那今天會開始跟大家討論Views跟URL之間的關係,

讓我們再複習一次

Django的MTV架構如何送出 request 並得到 response

  1. 瀏覽器送出 HTTP request
  2. Django 依據 URL configuration 分配至對應的 View
  3. View 進行資料庫操作並回傳 HttpResponse 物件
  4. 瀏覽器依據 HTTP response 顯示網頁

View 設定

想像成function,收HttpRequest 物件,回傳HttpResponse 物件:

  1. 收到 HttpRequest:從網頁接收到 request 後,會將 request 中的資訊封裝(Encapsulation)成 HttpRequest,並當成參數,傳入對應的 view function
  2. 接著回傳 HttpResponse 物件,反應至網頁上
    ( HttpResponse 物件包含:HttpResponse.content、HttpResponse.status_code …等 )
    那我們就用最基本的Hello world來讓大家看看
程式位置: classes/views.py

from django.http import HttpResponse
def hello_world(request):
    return HttpResponse("Hello Nuts!")

以上這幾段程式碼傳達什麼訊息呢?

  1. 從 django.http 模組中引用 HttpResponse 類別
  2. 宣告 hello_world 這個 view
  3. 當 hello_world 被呼叫,回傳字串 Hello Nuts! 的 HttpResponse 物件

URL 設定

從剛剛我們所設定的view,我們希望當有人瀏覽 http://127.0.0.1:8000/hellonuts/ 時 ,hello_world() 這個 view function 需要被執行,所以我們需要去設計當url後面帶hellonuts反應到哪個function,而這個對應關係就是 URL conf (URL configuration)。

URL Conf

定義:Django 收到 request 時,會一一比對 URL conf,決定要執行哪個 view function,我們通常寫在 urls.py內
現在我們來設定 Hello World 範例的 URL conf。

  1. 首先打開 classes/urls.py,先 import 剛剛寫的 view function:
    將urls.py改成
位置:mysite/urls.py

from django.conf.urls import include, url
from django.contrib import admin
from classes.views import hello_world #要記得import剛剛的view進來

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^hellonuts/$', hello_world),
]

從以上程式透過 url() function,其實我們傳入兩個參數(regex, view):

  1. regex -- 定義的 URL 規則,規則以 regular expression(正規表示式)來表達
    r'^hellonuts/$' 代表的是 hellonuts/ 這種 URL
  2. view -- 指的是 hello_world 這個 view 函式

注意,常犯的錯

常常寫完後結果回瀏覽器看,怎麼會出現Error?

不管是任何時候,程式編寫完想要看結果
都要確認server在running

python manage.py runserver

成功把server run起且沒有出現Error的話
可以看到我們的command line response

那這時候我們可以到剛剛urls.py裡面設的路徑/hellonuts
最後得到的結果

最後檢視今天學會了什麼

  • 更熟悉開發環境
  • 了解View / Urls之間的relationship
  • 可以自己建立路由並顯示客製訊息

下課囉 ~ 請鎖定 柚子放學後的網頁生活


上一篇
[Day9] 柚子放學後的網頁生活 - Django intro
下一篇
[Day11]柚子放學後的網頁生活 - Django Template
系列文
🍐放學後的網頁開發30

1 則留言

1
froce
iT邦大師 5 級 ‧ 2018-10-25 14:20:29

看到了url這個function。
雖然基本架構都是一樣的,但是 Django 2.0 已經改用 path 和 re_path 這兩個代替了。提醒一下。

柚子 iT邦新手 5 級‧ 2018-10-25 14:22:07 檢舉

感謝您的提醒!!
我的資訊更新太慢了/images/emoticon/emoticon02.gif

froce iT邦大師 5 級‧ 2018-10-25 14:25:01 檢舉

https://kinegratii.github.io/2017/09/25/django2-url-path/
參考資料。
path真的比url好用很多。

我要留言

立即登入留言