定義視圖 本質就是一個函數 視圖的參數 一個HttpRequest實例 通過正則表達式組獲取的位置參數 通過正則表達式組獲得的關鍵字參數 在應用目錄下預設有views.py文件,一般視圖都定義在這個文件中 如果處理功能過多,可以將函數定義到不同的py文件中 一個HttpRequest實例 通過正則表 ...
定義視圖
- 本質就是一個函數
- 視圖的參數
- 一個HttpRequest實例
- 通過正則表達式組獲取的位置參數
- 通過正則表達式組獲得的關鍵字參數
- 在應用目錄下預設有views.py文件,一般視圖都定義在這個文件中
- 如果處理功能過多,可以將函數定義到不同的py文件中
1 #新建views1.py 2 #coding:utf-8 3 from django.http import HttpResponse 4 def index(request): 5 return HttpResponse("hello world") 6 7 #在urls.py中修改配置 8 from . import views1 9 url(r'^$', views1.index, name='index'),
URLCONFG
- 在settings.py文件中通過ROOT_URLCONF指定根級url的配置
- urlpatterns是一個url()實例的列表
- 一個url()對象包括:
- 正則表達式
- 視圖函數
- 名稱name
- 編寫URLconf的註意:
- 若要從url中捕獲一個值,需要在它周圍設置一對圓括弧
- 不需要添加一個前導的反斜杠,如應該寫作'test/',而不應該寫作'/test/'
- 每個正則表達式前面的r表示字元串不轉義
- 請求的url被看做是一個普通的python字元串,進行匹配時不包括get或post請求的參數及功能變數名稱
#只匹配“/python/1/”部分 http://www.baidu.com/python/1/?i=1&p=new
- 正則表達式非命名組,通過位置參數傳遞給視圖
url(r'^([0-9]+)/$', views.detail, name='detail'),
- 正則表達式命名組,通過關鍵字參數傳遞給視圖,本例中關鍵字參數為id
url(r'^(?P<id>[0-9]+)/$', views.detail, name='detail'),
- 參數匹配規則:優先使用命名參數,如果沒有命名參數則使用位置參數
- 每個捕獲的參數都作為一個普通的python字元串傳遞給視圖
- 性能:urlpatterns中的每個正則表達式在第一次訪問它們時被編譯,這使得系統相當快
包含其他的URLCONFG
- 在應用中創建urls.py文件,定義本應用中的urlconf,再在項目的settings中使用include()
from django.conf.urls import include, url urlpatterns = [ url(r'^', include('usertest.urls', namespace='usertest')), ]
- 匹配過程:先與主URLconf匹配,成功後再用剩餘的部分與應用中的URLconf匹配
- 使用include可以去除urlconf的冗餘
- 參數:視圖會收到來自父URLconf、當前URLconf捕獲的所有參數
- 在include中通過namespace定義命名空間,用於反解析
URL的反向解析
- 如果在視圖、模板中使用硬編碼的鏈接,在urlconf發生改變時,維護是一件非常麻煩的事情
- 解決:在做鏈接時,通過指向urlconf的名稱,動態生成鏈接地址
- 視圖:使用django.core.urlresolvers.reverse()函數
- 模板:使用url模板標簽
HttpReqeust對象
- 伺服器接收到http協議的請求後,會根據報文創建HttpRequest對象
- 視圖函數的第一個參數是HttpRequest對象
- 在django.http模塊中定義了HttpRequest對象的API
屬性
- 下麵除非特別說明,屬性都是只讀的
- path:一個字元串,表示請求的頁面的完整路徑,不包含功能變數名稱
- method:一個字元串,表示請求使用的HTTP方法,常用值包括:'GET'、'POST'
- encoding:一個字元串,表示提交的數據的編碼方式
- 如果為None則表示使用瀏覽器的預設設置,一般為utf-8
- 這個屬性是可寫的,可以通過修改它來修改訪問表單數據使用的編碼,接下來對屬性的任何訪問將使用新的encoding值
- GET:一個類似於字典的對象,包含get請求方式的所有參數
- POST:一個類似於字典的對象,包含post請求方式的所有參數
- FILES:一個類似於字典的對象,包含所有的上傳文件
- COOKIES:一個標準的Python字典,包含所有的cookie,鍵和值都為字元串
- session:一個既可讀又可寫的類似於字典的對象,表示當前的會話,只有當Django 啟用會話的支持時
HttpResponse對象
- 在django.http模塊中定義了HttpResponse對象的API
- HttpRequest對象由Django自動創建,HttpResponse對象由程式員創建
- 不調用模板,直接返回數據
屬性
- content:表示返回的內容,字元串類型
- charset:表示response採用的編碼字元集,字元串類型
- status_code:響應的HTTP響應狀態碼
- content-type:指定輸出的MIME類型
方法
- init :使用頁內容實例化HttpResponse對象
- write(content):以文件的方式寫
- flush():以文件的方式輸出緩存區
- set_cookie(key, value='', max_age=None, expires=None):設置Cookie
- key、value都是字元串類型
- max_age是一個整數,表示在指定秒數後過期
- expires是一個datetime或timedelta對象,會話將在這個指定的日期/時間過期,註意datetime和timedelta值只有在使用PickleSerializer時才可序列化
- max_age與expires二選一
- 如果不指定過期時間,則兩個星期後過期