欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django如何將URL映射到視圖

 更新時(shí)間:2019年07月29日 11:05:49   作者:Blue·Sky  
這篇文章主要介紹了Django如何將URL映射到視圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

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

Python 搜索路徑

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

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

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

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

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

通常,你不必關(guān)心 Python 搜索路徑的設(shè)置。 Python 和 Django 會(huì)在后臺(tái)自動(dòng)幫你處理好。

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

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

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),
# ]

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

r'^index/$' 中的 r 表示'^index/$' 是一個(gè)原始字符串。這樣一來(lái)就可以避免 正則表達(dá)式有過(guò)多的轉(zhuǎn)義字符。

不必在 '^index/$'前加斜杠(/)來(lái)匹配 /index/ , 因?yàn)?Django 會(huì)自動(dòng)在每個(gè)表 達(dá)式前添加一個(gè)斜杠。乍看起來(lái),這好像有點(diǎn)奇怪,但是 URLconfs 可能由其它的 URLconfs 所引用, 所以不加前面的斜杠可讓事情簡(jiǎn)單一些。

上箭頭 ^ 和美元符號(hào) $ 符號(hào)非常重要。上箭頭要求表達(dá)式對(duì)字符串的頭部進(jìn)行匹配,美元符號(hào)則要求表達(dá)式對(duì)字符串的尾部進(jìn)行匹配。

最好還是用范例來(lái)說(shuō)明一下這個(gè)概念。如果我們用 '^index/' (結(jié)尾沒(méi)有$), 那么以 index/開(kāi)始的 任意 URL 都會(huì)匹配,比如 /index/foo 和 /index/bar , 不僅僅是 /index/ 。

同樣的,如果我們?nèi)サ糇钋懊娴?^ ( 'index/$' ), Django 一樣會(huì)匹配由index/ 結(jié)束的任意 URL/index/ ,

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

正則表達(dá)式

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

Django 是怎么處理請(qǐng)求的

我們必須對(duì)剛才所發(fā)生的幾件事情進(jìn)行一些說(shuō)明。它們是運(yùn)行 Django 開(kāi)發(fā)服務(wù)器和構(gòu)造 Web
頁(yè)面請(qǐng)求的本質(zhì)所在。

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

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

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

該view 函數(shù)負(fù)責(zé)返回一個(gè) HttpResponse 對(duì)象。

你現(xiàn)在知道了怎么做一個(gè) Django-powered 頁(yè)面了,真的很簡(jiǎn)單,只需要寫(xiě)視圖函數(shù)并用URLconfs 把它們和 URLs 對(duì)應(yīng)起來(lái)。

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

views 視圖

接下來(lái)請(qǐng)求的處理就到了.../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')

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

何用這些數(shù)據(jù)去查詢(xún)數(shù)據(jù)庫(kù), 再如何將登錄成功的頁(yè)面返回給用戶(hù), 這些全部由視圖層來(lái)完成。

Django 如何處理請(qǐng)求: 完整細(xì)節(jié)

除了剛才所說(shuō)到的簡(jiǎn)明 URL-to-view 映射方式之外, Django 在請(qǐng)求處理方面提供了大量的靈活性

通過(guò) URLconf 解析到哪個(gè)視圖函數(shù)來(lái)返回 HttpResponse 可以通過(guò)中間件(middleware) 來(lái)短路或者增強(qiáng)。關(guān)于中間件的細(xì)節(jié)將在第十五章詳細(xì)談?wù)?,這里給出 下圖 讓你先了解 大體概念.。

當(dāng)服務(wù)器收到一個(gè) HTTP 請(qǐng)求以后,一個(gè)服務(wù)器特定的 handler 會(huì)創(chuàng)建 HttpRequest 并傳遞給下一個(gè)組件并處理。

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

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

即便是這樣,你也不用擔(dān)心。 Django 包含缺省的視圖來(lái)生成友好的 404 和 500 回應(yīng)(response)。

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

簡(jiǎn)單實(shí)例

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

templates 模板

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

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

運(yùn)行后,結(jié)果如圖

Django 簡(jiǎn)單的處理流程

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Django 創(chuàng)建新App及其常用命令的實(shí)現(xiàn)方法

    Django 創(chuàng)建新App及其常用命令的實(shí)現(xiàn)方法

    這篇文章主要介紹了Django 創(chuàng)建新App及其常用命令的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python 非遞歸解決n皇后問(wèn)題的方法

    python 非遞歸解決n皇后問(wèn)題的方法

    這篇文章主要介紹了python 非遞歸解決n皇后問(wèn)題的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Selenium alert 彈窗處理的示例代碼

    Selenium alert 彈窗處理的示例代碼

    這篇文章主要介紹了Selenium alert 彈窗處理的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Python中pytest命令行實(shí)現(xiàn)環(huán)境切換

    Python中pytest命令行實(shí)現(xiàn)環(huán)境切換

    在自動(dòng)化測(cè)試過(guò)程中經(jīng)常需要在不同的環(huán)境下進(jìn)行測(cè)試驗(yàn)證,所以寫(xiě)自動(dòng)化測(cè)試代碼時(shí)需要考慮不同環(huán)境切換的情況,本文主要介紹了Python中pytest命令行實(shí)現(xiàn)環(huán)境切換,感興趣的可以了解一下
    2023-07-07
  • python3中numpy函數(shù)tile的用法詳解

    python3中numpy函數(shù)tile的用法詳解

    今天小編就為大家分享一篇python3中numpy函數(shù)tile的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 講清楚fit_transform()和transform()的區(qū)別及說(shuō)明

    講清楚fit_transform()和transform()的區(qū)別及說(shuō)明

    這篇文章主要介紹了講清楚fit_transform()和transform()的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 詳解python-圖像處理(映射變換)

    詳解python-圖像處理(映射變換)

    這篇文章主要介紹了python-圖像處理(映射變換),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • python實(shí)現(xiàn)上傳樣本到virustotal并查詢(xún)掃描信息的方法

    python實(shí)現(xiàn)上傳樣本到virustotal并查詢(xún)掃描信息的方法

    這篇文章主要介紹了python實(shí)現(xiàn)上傳樣本到virustotal并查詢(xún)掃描信息的方法,是比較實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)塊的網(wǎng)絡(luò)之VGG

    Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)塊的網(wǎng)絡(luò)之VGG

    雖然AlexNet證明深層神經(jīng)網(wǎng)絡(luò)卓有成效,但它沒(méi)有提供一個(gè)通用的模板來(lái)指導(dǎo)后續(xù)的研究人員設(shè)計(jì)新的網(wǎng)絡(luò)。下面,我們將介紹一些常用于設(shè)計(jì)深層神經(jīng)網(wǎng)絡(luò)的啟發(fā)式概念
    2021-10-10
  • Python Serial串口基本操作(收發(fā)數(shù)據(jù))

    Python Serial串口基本操作(收發(fā)數(shù)據(jù))

    這篇文章主要介紹了Python Serial串口基本操作(收發(fā)數(shù)據(jù)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論