1. 程式人生 > 其它 >Django Day 2

Django Day 2

Django處理URL請求

1.Django從配置檔案中根據ROOT_URLCONF找到主路由檔案
2.Django載入主路由檔案中的urlpatterns(是一個包含很多路徑的一個列表) 其中格式是path(檔名字,檢視函式)
3.一次匹配其中的path路徑,匹配到第一個後中斷後續匹配
4.匹配成功->呼叫對應的檢視函式;匹配失敗->返回404.

檢視函式

用於接收一個瀏覽器請求並通過HttpResponse物件返回相應的函式。即接請求反響應
語法

def view_xxx(requests[]):# 函式名 引數要是request
  return HttpResponse #必須return這麼一個物件

我們可以拿一個例子來說明這個用法,比如我們需要訪問一個下圖這種頁面。

首先我們需要在urls.py中配置對應的路由

from django.contrib import admin
from django.urls import path
from . import views #從當前目錄下匯入views檔案
urlpatterns = [
    path('admin/', admin.site.urls),# 官網中已經寫好的
    path('page/2003/', views.page_2003_view),# path匹配的是http://127.0.0.1:8000/page/2003/
]

可以看到我們用了相對路徑引用檔案的方法,所以我們還需要新建一個views.py

檔案 .就是相當於作業系統中的當前文件
檔案內容如下:

from django.http import HttpResponse
def page_2003_view(request): # 引數一定是request

    html = "<hl>這是第一個測試頁面</h1>" #這是網頁內的內容
    return HttpResponse(html) #這是返回 一定返回的是HttpResponse物件

所以我們需要先配置urls.py中的路由,然後通過path轉到相應的檢視函式進行處理。

路由配置 -- path

匯入

from django.urls import path

語法

path(route, views, name = None)
1.route:匹配請求的路徑
2.views:指定路徑所對應的檢視函式 此處函式不要加括號
3.name:地址的別名,在開發時方便書寫。

path轉換器

現在有一個需求是需要做100個上面例子給出的網頁,我們應該如何去做?難道要一層層的複製嗎?這顯然是不可取的,django中為我們提供了path轉換器

語法

<轉換器型別:自定義名>

例子

path('page/<int:page>', views.xxx) #views是檢視函式

如果轉換器匹配到了對應的資料,則將資料按照關鍵字傳參的方式傳遞給檢視函式

轉換器型別

slug:匹配任意由ASCII字母或數字以及連字元和下劃線組成的短標籤(詳情請看leetcode)
str:匹配除'/'以外的非空字串
path:匹配非空字串包括'/'

總結

我們可以通過path轉換器得到動態頁面,通過intstr兩種轉換器可以得到很多不同的動態頁面。
比如我們可以用這個技術來實現一個網頁計算器,我們需要匹配的網頁時http://127.0.0.1:8000/page/num1/op/num2。其中num1是其中第一個數,op是操作符,num2是第二個數。
我們先在urls的path中加入:

    path('page/<int:add1>/<str:op>/<int:add2>', views.op_view) #配置的是http://127.0.0.1:8000/1/add/2

然後通過關鍵字傳參些檢視函式

def op_view(request, add1, op, add2):
    if(op == "add"): html = add1 + add2
    elif(op == "sub"): html = add1 - add2
    elif(op == "multiply") :html = add1 * add2
    else:html = add1 / add2

    return HttpResponse(str(html)) #注意HttpResponse中的引數一定得是一個字串哦