[Django學習]第三章 視圖和url配置

    在上一章使用django-admin.py startproject tests製做的項目中的tests文件夾裏,建立一個views.py文件.python

    1.在views文件中編寫以下代碼正則表達式

from django.http import HttpResponse

def hello(request):
return HttpResponse('Hello World')

上面這段代碼僅僅返回一個HttpResponse對象,而這個對象之包含文本「Hello World」.django

 一個視圖就是Python的一個函數。這個函數第一個參數的類型是HttpRequest;它返回一個HttpResponse實例。爲了使一個Python的函數成爲一個Django可識別的視圖,它必須知足這兩個條件。瀏覽器

2.打開urls.py文件,在原來的基礎上添加函數

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

from tests.views import hello

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

]

以下url

首先,咱們從模塊 (在 Python 的 import 語法中, tests/views.py 轉譯爲 tests.views ) 中引入了 hello視圖。code

接下來,咱們爲urlpatterns加上一行: (‘^hello/$’, hello), 這行被稱做URLpattern,它是一個Python的元組。元組中第一個元素是模式匹配字符串(正則表達式);第二個元素是那個模式將使用的視圖函數。server

Django在檢查URL模式前,移除每個申請的URL開頭的斜槓(/)。 這意味着咱們爲/hello/寫URL模式不用包含斜槓(/)。模式包含了一個尖號(^)和一個美圓符號($)。這些都是正則表達式符號,而且有特定的含義: 上箭頭要求表達式對字符串的頭部進行匹配,美圓符號則要求表達式對字符串的尾部進行匹配。對象

最好仍是用範例來講明一下這個概念。 若是咱們用尾部不是$的模式’^hello/’,那麼任何以/hello/開頭的URL將會匹配,例如:/hello/foo 和/hello/bar,而不單單是/hello/。相似地,若是咱們忽略了尖號(^),即’hello/$’,那麼任何以hello/結尾的URL將會匹配,例如:/foo/bar/hello/。若是咱們簡單使用hello/,即沒有^開頭和$結尾,那麼任何包含hello/的URL將會匹配,如:/foo/hello/bar。所以,咱們使用這兩個符號以確保只有/hello/匹配,很少也很多。字符串

你大多數的URL模式會以^開始、以$結束,可是擁有複雜匹配的靈活性會更好。

你可能會問:若是有人申請訪問/hello(尾部沒有斜槓/)會怎樣。 由於咱們的URL模式要求尾部有一個斜槓(/),那個申請URL將不匹配。 然而,默認地,任何不匹配或尾部沒有斜槓(/)的申請URL,將被重定向至尾部包含斜槓的相同字眼的URL。

3.運行試試

python manage.py runserver

運行後打開瀏覽器http://127.0.0.1:8000/

發現找不到頁面,爲何呢?由於剛剛配置的url是 http://127.0.0.1:8000/hello/

成功了。。。

關於正則表達式:

正則表達式 (或 regexes ) 是通用的文本模式匹配的方法。 Django URLconfs 容許你 使用任意的正則表達式來作強有力的URL映射,不過一般你實際上可能只須要使用不多的一 部分功能。 這裏是一些基本的語法。

符號 匹配
. (dot) 任意單一字符
\d 任意一位數字
[A-Z] A 到 Z中任意一個字符(大寫)
[a-z] a 到 z中任意一個字符(小寫)
[A-Za-z] a 到 z中任意一個字符(不區分大小寫)
+ 匹配一個或更多 (例如, \d+ 匹配一個或 多個數字字符)
[^/]+ 一個或多個不爲‘/’的字符
* 零個或一個以前的表達式(例如:\d? 匹配零個或一個數字)
* 匹配0個或更多 (例如, \d* 匹配0個 或更多數字字符)
{1,3} 介於一個和三個(包含)以前的表達式(例如,\d{1,3}匹配一個或兩個或三個數字)
相關文章
相關標籤/搜索