python--django之url控制器

來源:互聯網
上載者:User

標籤:自動更新   傳遞   表達   設計   標識   att   django   nbsp   控制器   

1.視圖層之路由配置系統(views)

URL配置(URLconf)就像Django所支撐網站的目錄。它的本質是URL與要為該URL調用的視圖函數之間的映射表;你就是以這種方式告訴Django,對於這個URL調用這段代碼,對於那個URL調用那段代碼。

‘‘‘        urlpatterns = [         url(Regex, views視圖函數,參數,別名),]參數說明:    一個Regex字串    一個可調用對象,通常為一個視圖函數或一個指定視圖函數路徑的字串    可選的要傳遞給視圖函數的預設參數(字典形式)    一個可選的name參數    ‘‘‘

2.URLconf的正則字串參數

2.1.簡單配置

from django.conf.urls import url
##from blog import views as blog_views  #可以定義別名
from . import views urlpatterns = [ url(r‘^articles/2003/$‘, views.special_case_2003), url(r‘^articles/([0-9]{4})/$‘, views.year_archive), url(r‘^articles/([0-9]{4})/([0-9]{2})/$‘, views.month_archive), url(r‘^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$‘, views.article_detail), ]

 2.2.url匹配的特點

    1 一旦匹配成功則不再繼續    2 若要從URL 中捕獲一個值,只需要在它周圍放置一對圓括弧。    3 不需要添加一個前置的反斜線,因為每個URL 都有。例如,應該是^articles 而不是 ^/articles。    4 每個Regex前面的‘r‘ 是可選的但是建議加上。

2.3.無名分組

url(r‘article/(\d+)/(\d+)$‘,blog_views.article_yearMonth ), # article_yearMonth(request,2009,12)

 分組會將括弧中的內容當成實參傳入到request的後邊。傳參數方式等於位置傳參。

2.4.有名分組(named group) 傳參方式等同於關鍵字傳參,不受位置影響。

例子:

url(r‘^blog/article/(?P<year_id>\d+)/(?P<month_id>\d+)$‘,blog_views.article_yearMonth )  # article_yearMonth(request,year_id=2009,month_id=12)

2.5.url 分發

所有應用的url匹配規則唯寫到一個urls中,需要寫好多條記錄,這樣不方便調試,看起來也很混亂。所有就需要用到路由分發,即將每個應用的url匹配規則分發定義到各自的應用中去,項目中的url值定義到應用的分發規則即可。

例子:

    # 路由分發    url(r‘^blog/‘, include(‘blog.urls‘)),   #將所有跟blog相關的url解析規則放到 blog應用中去。    url(r‘^login.htmls/‘, app01_views.login,name="LOGIN")

 2.6. URL方向解析(url中的別名參數)

在使用Django 項目時,一個常見的需求是獲得URL 的最終形式,以用於嵌入到產生的內容中(視圖中和顯示給使用者的URL等)或者用於處理伺服器端的導航(重新導向等)。

人們強烈希望不要寫入程式碼這些URL(費力、不可擴充且容易產生錯誤)或者設計一種與URLconf 毫不相關的專門的URL 產生機制,因為這樣容易導致一定程度上產生到期的URL。

換句話講,需要的是一個DRY 機制。除了其它有點,它還允許設計的URL 可以自動更新而不用遍曆項目的原始碼來搜尋並替換到期的URL。

擷取一個URL 最開始想到的資訊是處理它視圖的標識(例如名字),尋找正確的URL 的其它必要的資訊有視圖參數的類型(位置參數、關鍵字參數)和值。

Django 提供一個辦法是讓URL 對應是URL 設計唯一的地方。你填充你的URLconf,然後可以雙向使用它:

  • 根據使用者/瀏覽器發起的URL 請求,它調用正確的Django 視圖,並從URL 中提取它的參數需要的值。
  • 根據Django 視圖的標識和將要傳遞給它的參數的值,擷取與之關聯的URL。

第一種方式是我們在前面的章節中一直討論的用法。第二種方式叫做反向解析URL、反向URL 匹配、反向URL 查詢或者簡單的URL 反查。

在需要URL 的地方,對於不同層級,Django 提供不同的工具用於URL 反查:

  • 在模板中:使用url 模板標籤。
  • 在Python 代碼中:使用django.core.urlresolvers.reverse() 函數。
  • 在更高層的與處理Django 模型執行個體相關的代碼中:使用get_absolute_url() 方法。

 

例子:

項目中的url這麼寫

    url(r‘^login.htmls/‘, app01_views.login,name="LOGIN")

 

通過app01應用中的views找到 login方法

from django.shortcuts import render,HttpResponse# Create your views here.def login(request):    if request.method=="POST":        user=request.POST.get("user")        pwd=request.POST.get("pwd")        return HttpResponse("登入成功!")    return render(request,"login.html")

 

通過login函數找到需要請求  login.html這個頁面

login頁面內容如下:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><form action="{% url ‘LOGIN‘ %}" method="post">    <p>姓名 <input type="text" name="user"></p>    <p>密碼 <input type="password" name="pwd"></p>    <input type="submit"></form></body></html>

 

python--django之url控制器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.