iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0

前言

哈囉大家,今天我們要延續昨天所寫的將views 和 URLS做連接,來做更深入的了解。

Views and Urls

在Django中Views主要是負責讓什麼(What)資訊呈現給使用者。
Urls主要是負責資訊呈現的位置(Where)。
所以可以想像成一組Views鏈結到Urls就是一個網站的呈現,負責這件事的就是URLconf。

https://ithelp.ithome.com.tw/upload/images/20220912/20150927WqIhyIgFkl.png

URLconf

什麼是URLconf?
指是網址的解析以及對應到views.py中函數的主要處理者。
網址對應主要是以定義路由字串來設定網址的內容以及對應的參數格式。

URLconf處理request的步驟

  1. 他會先去setting的ROOT_URLCONF,找尋目前對應的模組,通常這個會由project幫你設定好,一般不用去修改。
    https://ithelp.ithome.com.tw/upload/images/20220915/201509276YalckbvDU.png
  2. 接著他會載入所設定的模組,去尋找可以使用的urlpatterns。
  3. 依照urlpatterns中的順序,一個一個往下去找是否有對應的網址和路由字串,直到找到第一個和相符的path。
  4. 一旦有找到相符的path就會去呼叫view對應的函式,並呈現給使用者。
  5. 如果都找不到符合的URL,就會產生一個例外處理程序。

而在urlpatterns中的path裡有四個引數可以傳遞,分別式route、view、kwargw和name。
我們分別來看它們的用途。

route

route顧名思義就是路徑的位置。
Django 會去尋找是否有這種path字串,ex:'/hello',並進行連接。
所以我們昨天建置完成後就可以透過 http://127.0.0.1:8000/hello/world/ 來連接到views的hello。
它也可以傳遞參數給別人,這部分後面會在細講。

view

一旦有找到符合的路徑,views.py就會和Urls 或是 function進行鏈結。
並將相對應的view呈現給使用者。

name

可以幫Urls設名字,並可以在專案中使用它來當作鏈接的點。
之後再Templates時會在做詳細講解。

kwargs

可以傳送dictionary的引數給views。
用下面的例子來示範

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('world/', views.hello, name = 'hello', kwargs={"x":20, "y":23}) #app -> project urls
]

views.py

from django.shortcuts import render
from django.http import HttpResponse
def hello(request,x,y):
    return HttpResponse(f"Hello Django+{x}+{y}")

https://ithelp.ithome.com.tw/upload/images/20220913/20150927IZkgwukz81.png

可以看到在hello就可以接收kwargs的引數來呈現!
是不是很好玩呢XD
那今天就介紹到這裡,我們明天見!

參考資料&推薦閱讀

https://docs.djangoproject.com/en/4.1/ref/urls/#django.urls.include


上一篇
Day5 -Django APP的架構與建置
下一篇
Day7 -URLS and Views -Function Views
系列文
從0 到 50 初探 如何使用Django 架構出一個網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言