Django框架之MVT(2)

Django框架之MVT

一、        MVT模型html

-     module:模型,和數據庫相關的正則表達式

-     template:模板,存放html文件,模板語法(目的是將變量若是巧妙的嵌入到html頁面中)數據庫

-     view:視圖函數django

另外加-urls:url路勁與視圖函數的映射關係,能夠不是一一對應的。瀏覽器

 

二、        url配置(URLconf)urls.py服務器

功能:創建起url與視圖函數的映射關係框架

url(正則表達式(規則),視圖函數,[可選參數])函數

url:http://127.0.0.1:8080/blog/articles/2003/05?a=1&b=2工具

       匹配字符串:用戶輸入的url對應的路徑   /blog/articles/2003/05編碼

注意:

(1)  出現覆蓋現象的狀況,也就是匹配規則衝突的時候,匹配第一個url。

(2)     無名分組:url(r'^articles/(\d{4})/(\d{2})$', views.year_month),  

# year(requset,1990,12)   按位置傳參數

(3)    有名分組:url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})$', views.year_month), 

 # year(requset,year=1990,month=12)   按位置傳參數

(4)    url分發:url(r'^blog/',include('blog.urls'))

三、       視圖函數:必定是要包含兩個對象的(render源碼裏面有HTTPRequest對象)

request對象:à全部的請求信息

HTTPRequest:à響應的內容(字符串)

 

四、get請求發送數據:http://127.0.0.1:8000/login.html?user=asd&pwd=asd

       注意:

       重點:request裏面包含哪些數據

(1) request.GET:GET請求的樹數據,若是沒有數據是一個空字典{}

(2) request.POST:POST請求的數據,若是沒有數據是一個空字典{}

(3) request.method:請求方式:GET或POST

(4) 請求某個鍵下多個值時:request.POST.getlist(「hobby」)

(5) request.path:請求路徑(只會拿路徑,不會拿數據)

請求url:http://127.0.0.1:8000/index.html/23?a=1
 path:request.path:/index.html/23

       (6)request.get_full_path():請求路徑(路徑和數據都會拿到)

          請求url:http://127.0.0.1:8000/index.html/23?a=1
     request.get_full_path():/index.html/23?a=1

四、         render函數和redirect函數的區別

render:只會返回頁面內容,可是未發送第二次請求。

redirect:發揮了第二次請求,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() 方法。

from django.conf.urls import url

 

from . import views

 

urlpatterns = [

    #...

    url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),

    #...

]

 

根據這裏的設計,某一年nnnn對應的歸檔的URL是/articles/nnnn/

你能夠在模板的代碼中使用下面的方法得到它們:

<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>

<ul>

{% for yearvar in year_list %}

<li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>

{% endfor %}

</ul>

 

在Python 代碼中

from django.core.urlresolvers import reverse

from django.http import HttpResponseRedirect

def redirect_to_year(request):

   # ...

   year = 2006

   # ...

return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))

若是出於某種緣由決定按年歸檔文章發佈的URL應該調整一下,那麼你將只須要修改URLconf中的內容。

在某些場景中,一個視圖是通用的,因此在URL 和視圖之間存在多對一的關係。對於這些狀況,當反查URL 時,只有視圖的名字還不夠。

 

例子中:

分析:想咱們一開始寫的硬編碼,也就是吧action要跳轉的路徑寫死了。可是像淘寶,天貓等都會常常更新新東西,,那麼你的頁面上的url路徑也會時不時的變化。可是若是有特別多的商品,那麼你就得去服務端一個一個的改,這樣顯得很麻煩,那麼有沒有一種機制幫咱們解決問題呢?那就按照我下面的辦法解決。就把url路徑寫活了。

一、首先給url起一個別名。

二、而後在login.html中寫上{%  url ‘別名’’  %}    ,若是在頁面中點擊查看元素,它會變成login.html,,,固然個人是分發了,,就會變成test/login.html

三、這樣你就能夠修改你的正則了,,由於他是按照別名走的,不會影響。

 

這樣的好處是:不管你怎麼改你要匹配的url,只要你寫上了別名。在html實現了模板語法,就會去找別名對應的那個url,之後無論你怎麼改url都沒事,就寫活了,就不像一開始寫的硬編碼了。

相關文章
相關標籤/搜索