URLconf 就像是 Django 所支撐網站的目錄。它的本質是 URL 模式以及要爲該 URL 模式調
用的視圖函數之間的映射表。你就是以這種方式告訴 Django,對於這個 URL 調用這段代碼,
對於那個 URL 調用那段代碼。但必須記住的是視圖函數必須位於 Python 搜索路徑之中。
html
Python 搜索路徑 就是使用 import 語句時, Python 所查找的系統目錄清單。
舉例來講,假定你將 Python 路徑設置爲
['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。若是執行代碼
from foo import bar , Python 將會首先在當前目錄查找 foo.py 模塊( Python 路徑第一
項的空字符串表示當前目錄)。若是文件不存在, Python 將查找
/usr/lib/python2.4/site-packages/foo.py 文件。若是文件也不存在,它將嘗試
/home/username/djcode/foo.py 。最後,若是 這個 文件還不存在,它將引起 ImportError
異常。
前端
若是對了解 Python 搜索路徑值感興趣,能夠啓動 Python 交互式解釋程序,輸入 import
sys ,接着輸入 print sys.path 。
python
一般,你沒必要關心 Python 搜索路徑的設置。 Python 和 Django 會在後臺自動幫你處理好。
(若是有興趣瞭解的話, Python 搜索路徑的設置工做是 manage.py 文件的職能之一。 )
程序員
執行 django-admin.py startproject 時,該腳本會自動爲你建了一份 URLconf(即
urls.py 文件)。讓咱們編輯一下這份文件。缺省狀況下它是下面這個樣子:
正則表達式
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/$' 是一個原始字符串。這樣一來就能夠避免 正則表達式
有過多的轉義字符。django
沒必要在 '^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 開發服務器和構造 Web
頁面請求的本質所在。
命令 python manage.py runserver 從同一目錄載入文件 settings.py 。 該文件包含了這
個特定的 Django 實例全部的各類可選配置,其中一個最重要的配置就是 ROOT_URLCONF 。
ROOT_URLCONF 告訴 Django 哪一個 Python 模塊應該用做本網站的 URLconf。
還記得 django-admin.py startproject 建立的文件 settings.py 和 urls.py 嗎? 這時
系統自動生成的 settings.py 裏 ROOT_URLCONF 默認設置是 urls.py 。
當訪問 URL /time/ 時, Django 根據 ROOT_URLCONF 的設置裝載 URLconf 。 而後按順序逐
個匹配 URLconf 裏的 URLpatterns,直到找到一個匹配的。當找到這個匹配 的 URLpatterns
就調用相關聯的 view 函數,並把 HttpRequest 對象做爲第一個參數。 (稍後再給出
HttpRequest 的更多信息)
該 view 函數負責返回一個 HttpResponse 對象。
你如今知道了怎麼作一個 Django-powered 頁面了,真的很簡單,只須要寫視圖函數並用
URLconfs 把它們和 URLs 對應起來。你可能會認爲用一系列正則表達式將 URLs 映射到函數也
許會比較慢,但事實卻會讓你驚訝。
接下來請求的處理就到了.../sign/views.py 中的 index 視圖函數
#-*-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 中很是重要, 是鏈接頁面與數據的中間紐帶。 拿登陸的例子來說, 用戶在頁
面上輸入了用戶名和密碼點擊登陸。 那麼 request 請求會由視圖來接收, 如何提取出用戶名和密碼的數據, 如
何用這些數據去查詢數據庫, 再如何將登陸成功的頁面返回給用戶, 這些所有由視圖層來完成。
Django 如何處理請求: 完整細節
除了剛纔所說到的簡明 URL-to-view 映射方式以外, Django 在請求處理方面提供了大量的靈
活性
經過 URLconf 解析到哪一個視圖函數來返回 HttpResponse 能夠經過中間件(middleware) 來
短路或者加強。關於中間件的細節將在第十五章詳細談論,這裏給出 下圖 讓你先了解 大
體概念.。
當服務器收到一個 HTTP 請求之後,一個服務器特定的 handler 會建立 HttpRequest 並傳遞
給下一個組件並處理。
這個 handler 而後調用全部可用的 Request 或者 View 中間件。這些類型的中間件一般是用
來 加強 HttpRequest 對象來對一些特別類型的 request 作些特別處理。只要其中有一個 返
回 HttpResponse ,系統就跳過對視圖的處理。
即使是最棒的程序員也會有出錯的時候, 這個時候 異常處理中間件(exception middleware) 能夠幫你的
大忙。若是一個視圖函數拋出異常,控制器會傳遞給異常處理中間件處理。若是這個 中間件沒有返回
HttpResponse ,意味着它不能處理這個異常,這個異常將會再次拋出。
即使是這樣,你也不用擔憂。 Django 包含缺省的視圖來生成友好的 404 和 500 迴應
(response)。
最後, response middleware 作發送 HttpResponse 給瀏覽器以前的後處理或者清除 請求
用到的相關資源。
新建一個html頁面,命名爲: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 頁面了, Django 自帶的有模板語言。 它的主要做用是如何展現數據,
好比視圖層返回的是一個字符串, 要如何顯示在頁面上; 返回的對象數組要如何顯示等。 固然, 爲了使頁面
更漂亮須要藉助前端技術, 好比 CSS、 JavaScript 等。
運行後,結果如圖