django urls.py 路由用法


URL(Uniform Resoure Locator)統一資源

定位符是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,

是互聯網上標准資源的地址。互聯網上的每個文件都有一個唯一的URL,

它包含的信息指出文件的位置以及瀏覽器應該怎么處理它。

[1]  它最初是由蒂姆·伯納斯·李發明用來作為萬維網的地址。

現在它已經被萬維網聯盟編制為互聯網標准RFC1738了。

url格式

URL解釋:

schema://host[:port#]/path/.../[?query-string][#anchor]

schema:指定使用的協議(例如:http, https, ftp)

host:Http服務器的IP地址或者域名

port:端口號,http默認是80端口

path:訪問資源的路徑 query-string:發送給http服務器的數據

anchor:錨點

URLs.py的作用

URL配置(URLconf)就像是Django所支撐網站的目錄。

它的本質是URL模式以及要為該URL模式調用的視圖函數之間的映射表。

以這樣的方式告訴Django,對於這個URL調用這段代碼,對於那個URL調用那段代碼。

url的加載就是從配置文件中開始。

URLs.py 示例

from django.conf.urls import url

from django.contrib import admin

from hello import views

urlpatterns = [

    url(r'^admin/', admin.site.urls),

    url(r'^hello/$',views.hello),

    url(r'^books/$',views.books,name=“books”),

]

url解析過程

Django會從urlpatterns里順次讀取元素,每個元素是方法url調用后返回的結果。

django傳給url路由要處理的地址,該地址是被去掉主機地址及之后的一個“/”的剩余部分:

例如: http://127.0.0.1:8000/hello/ 經處理后的剩余部分就是:

hello/ 然后把該剩余部分與url方法的第一個參數進行正則匹配,

如何匹配成功,則執行url的第二個參數指定的方法

(該方法一般放在views.py中,主要功能的實現具體業務邏輯)。

url函數定義

Def url(regex, view, kwargs=None, name=None)

Regex: 傳入的url要匹配的正則表達式

View:一個可調用的對象或一個url類型的列表或元組

Kwargs:關鍵字參數,必須是一個字典數組,可以通過這個參數傳遞更多的信息給view

Name:關鍵字參數,是一個字符串,用於給regex匹配的字符串取名字

url常用正則表達式

url(r'^hello/$',views.hello),

^表示以什么什么開頭

$表示以什么什么結尾

^$聯合使用表示必須完整匹配

注意:末尾的/是必須的,雖然瀏覽器會根據情況幫助自動添加/,

但是不要以為不輸入就等於不添加。

url常用正則表達式

模式匹配示例:

url(r‘books/python/$', views.books_python) # books/python

url(r‘books/php/$', views.books_php) # books/php

url(r‘books/([a-zA-Z0-9]*)/$', views.books)

url(r‘books/([\S\s]*)/$', views.books)

參數傳遞示例:

url(r‘books/\d{2}/$', views.books) # books/66

url(r‘books/(?P<id>\d{2})/$', views.books) #books/10   books(req,id=10)

url(r‘books/(?P<id>\d{2})/(?P<ver>\w+) /$', views.books)

#test/20/3 books(req,id=20,ver=3)

Include的作用

方便項目管理:

一個project有一個總的urls.py,各個app也可以自己建立自己的urls.py,

不過都需要使用include()函數在project的urls.py文件進行注冊。

kwargs的作用

傳遞更多信息給view

name的作用

給一個匹配的url地址取名字

一般用於模板

也可以使用reverse進行頁面重定向

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM