溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django將URL映射到視圖的方法

發(fā)布時間:2021-02-03 12:49:49 來源:億速云 閱讀:268 作者:小新 欄目:開發(fā)技術

這篇文章給大家分享的是有關Django將URL映射到視圖的方法的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

前言

URLconf 就像是 Django 所支撐網(wǎng)站的目錄。它的本質是 URL 模式以及要為該 URL 模式調用的視圖函數(shù)之間的映射表。你就是以這種方式告訴 Django,對于這個 URL 調用這段代碼,對于那個 URL 調用那段代碼。但必須記住的是視圖函數(shù)必須位于 Python 搜索路徑之中。

Python 搜索路徑

Python 搜索路徑 就是使用 import 語句時, Python 所查找的系統(tǒng)目錄清單。

舉例來說,假定你將 Python 路徑設置為['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。如果執(zhí)行代碼
from foo import bar , Python 將會首先在當前目錄查找 foo.py 模塊( Python 路徑第一項的空字符串表示當前目錄)。如果文件不存在, Python 將查找/usr/lib/python2.4/site-packages/foo.py 文件。

如果文件也不存在,它將嘗試/home/username/djcode/foo.py 。

最后,如果這個文件還不存在,它將引發(fā)ImportError異常。

如果對了解 Python 搜索路徑值感興趣,可以啟動 Python 交互式解釋程序,輸入 importsys ,接著輸入 print sys.path

通常,你不必關心 Python 搜索路徑的設置。 Python 和 Django 會在后臺自動幫你處理好。

(如果有興趣了解的話, Python 搜索路徑的設置工作是 manage.py 文件的職能之一。 )

執(zhí)行 django-admin.py startproject 時,該腳本會自動為你建了一份 URLconf(即
urls.py 文件)。讓我們編輯一下這份文件。缺省情況下它是下面這個樣子:

Django將URL映射到視圖的方法

from django.conf.urls import url
from django.contrib import admin

import view

urlpatterns = [
 url(r'^hello', view.djangoStudy),
 url(r'^admin/', admin.site.urls),
 url(r'^index/$',view.index)
]

# urlpatterns = [
#  url(r'^admin/', admin.site.urls),
# ]

當前應該注意是 urlpatterns 變量, Django 期望能從 ROOT_URLCONF 模塊中找到它。該變量定義了 URL 以及用于處理這些 URL 的代碼之間的映射關系

r'^index/$' 中的 r 表示'^index/$' 是一個原始字符串。這樣一來就可以避免 正則表達式有過多的轉義字符。

不必在 '^index/$'前加斜杠(/)來匹配 /index/ , 因為 Django 會自動在每個表 達式前添加一個斜杠。乍看起來,這好像有點奇怪,但是 URLconfs 可能由其它的 URLconfs 所引用, 所以不加前面的斜杠可讓事情簡單一些。

上箭頭 ^ 和美元符號 $ 符號非常重要。上箭頭要求表達式對字符串的頭部進行匹配,美元符號則要求表達式對字符串的尾部進行匹配。

最好還是用范例來說明一下這個概念。如果我們用 '^index/' (結尾沒有$), 那么以 index/開始的 任意 URL 都會匹配,比如 /index/foo 和 /index/bar , 不僅僅是 /index/ 。

同樣的,如果我們去掉最前面的 ^ ( 'index/$' ), Django 一樣會匹配由index/ 結束的任意 URL/index/ ,

比如 /foo/bar/index/ 。 因此,我們必須同時用上 ^ 和 $ 來精確匹配 URL/index/ 。不能多也不能少。

正則表達式

正則表達式 (或 regexes ) 是通用的文本模式匹配的方法。 Django URLconfs 允許你 使用任意的正則表達式來做強有力的 URL 映射,不過通常你實際上可能只需要使用很少的一部分功能。下面就是一些常用通用模式:

Django將URL映射到視圖的方法

Django 是怎么處理請求的

我們必須對剛才所發(fā)生的幾件事情進行一些說明。它們是運行 Django 開發(fā)服務器和構造 Web
頁面請求的本質所在。

命令 python manage.py runserver 從同一目錄載入文件 settings.py 。 該文件包含了這個特定的 Django 實例所有的各種可選配置,其中一個最重要的配置就是 ROOT_URLCONF 。

ROOT_URLCONF 告訴 Django 哪個 Python 模塊應該用作本網(wǎng)站的 URLconf。還記得 django-admin.py startproject 創(chuàng)建的文件 settings.py 和 urls.py 嗎? 這時系統(tǒng)自動生成的 settings.py 里 ROOT_URLCONF 默認設置是 urls.py 。

當訪問 URL /time/ 時, Django 根據(jù) ROOT_URLCONF 的設置裝載 URLconf 。 然后按順序逐個匹配 URLconf 里的 URLpatterns,直到找到一個匹配的。當找到這個匹配 的 URLpatterns就調用相關聯(lián)的 view 函數(shù),并把 HttpRequest 對象作為第一個參數(shù)。 (稍后再給出HttpRequest 的更多信息)

該view 函數(shù)負責返回一個 HttpResponse 對象。

你現(xiàn)在知道了怎么做一個 Django-powered 頁面了,真的很簡單,只需要寫視圖函數(shù)并用URLconfs 把它們和 URLs 對應起來。

你可能會認為用一系列正則表達式將 URLs 映射到函數(shù)也許會比較慢,但事實卻會讓你驚訝。

views 視圖

Django將URL映射到視圖的方法

接下來請求的處理就到了.../sign/views.py 中的 index 視圖函數(shù)

#-*-coding:utf-8-*-
# Time:2017/11/13 17:08
# Author:YangYangJun

from django.http import HttpResponse
from django.shortcuts import render


def djangoStudy(request):
 return HttpResponse('Hello DjangoStudy !')

def index(request):
 return render(request,'index.html')

視圖在我看來, 它在 Django 中非常重要, 是連接頁面與數(shù)據(jù)的中間紐帶。 拿登錄的例子來講, 用戶在頁面上輸入了用戶名和密碼點擊登錄。 那么 request 請求會由視圖來接收, 如何提取出用戶名和密碼的數(shù)據(jù), 如

何用這些數(shù)據(jù)去查詢數(shù)據(jù)庫, 再如何將登錄成功的頁面返回給用戶, 這些全部由視圖層來完成。

Django 如何處理請求: 完整細節(jié)

除了剛才所說到的簡明 URL-to-view 映射方式之外, Django 在請求處理方面提供了大量的靈活性

通過 URLconf 解析到哪個視圖函數(shù)來返回 HttpResponse 可以通過中間件(middleware) 來短路或者增強。關于中間件的細節(jié)將在第十五章詳細談論,這里給出 下圖 讓你先了解 大體概念.。

Django將URL映射到視圖的方法

當服務器收到一個 HTTP 請求以后,一個服務器特定的 handler 會創(chuàng)建 HttpRequest 并傳遞給下一個組件并處理。

這個 handler 然后調用所有可用的 Request 或者 View 中間件。這些類型的中間件通常是用來增強HttpRequest 對象來對一些特別類型的 request 做些特別處理。只要其中有一個返回 HttpResponse ,系統(tǒng)就跳過對視圖的處理。

即便是最棒的程序員也會有出錯的時候, 這個時候 異常處理中間件(exception middleware) 可以幫你的大忙。如果一個視圖函數(shù)拋出異常,控制器會傳遞給異常處理中間件處理。如果這個 中間件沒有返回HttpResponse ,意味著它不能處理這個異常,這個異常將會再次拋出。

即便是這樣,你也不用擔心。 Django 包含缺省的視圖來生成友好的 404 和 500 回應(response)。

最后, response middleware 做發(fā)送 HttpResponse 給瀏覽器之前的后處理或者清除 請求用到的相關資源。

簡單實例

新建一個html頁面,命名為:index.html, urls和view配置如上圖

templates 模板

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Django Page</title>
</head>
<body>
<h2>Hello Django</h2>
</body>
</html>

模板的載體就是我們所熟悉的 Web 頁面了, Django 自帶的有模板語言。 它的主要作用是如何展示數(shù)據(jù),比如視圖層返回的是一個字符串, 要如何顯示在頁面上; 返回的對象數(shù)組要如何顯示等。 當然, 為了使頁面更漂亮需要借助前端技術, 比如 CSS、 JavaScript 等。

運行后,結果如圖

Django將URL映射到視圖的方法

Django 簡單的處理流程

Django將URL映射到視圖的方法

感謝各位的閱讀!關于“Django將URL映射到視圖的方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI