由於每個view都接受一個HttpRequest並返回HttpResponse,由於HttpRequest是由系統定制的,我們只需要知道里面有哪些常用的內容即可.Response是由我們手動創建的,所以需要知道幾種常用的方式的作用.
from django.http import HttpResponse, HttpResponseRedirect
from from django.core.urlresolvers import reverse
HttpResponse,是其他轉發的父類,由於只是相當於返回一個字符串,所以在返回簡單的頁面或文本,圖像(注明MIME)等內容時可以使用
HttpResponseRedirect, 常用的轉發函數,可以傳遞的參數有,相對地址,絕對地址.常用的是通過反查得到url,reverse('namespace:name')
簡潔化的操作:
render()/redirect()
render與HttpResponseRedirect的區別是,當使用render轉發時,他不會修改url,只是替換頁面,所以適合定向到對應的頁面中去,常規操作適合,簡單,但是不適合轉發,不改變url讓人很難適應
redirect() 用法和結果與使用HttpResponseRedirect一樣,而且還和render在同一個模塊下,方便導入,如果不需要使用HttpResponseRedirect構建復雜的返回的話使用這個很方便
因為redirect返回的就是HttpResponseRedirect對象,並且接受的參數有*args,**kwargs,所以可以代替HttpResponseRedirect完成很多操作
該方法有三種傳參方式
通過傳遞一個對象;將調用get_absolute_url() 方法來獲取重定向的URL:
通過傳遞一個視圖的名稱,可以帶有位置參數和關鍵字參數;將使用reverse() 方法反向解析URL:
return redirect('some-view-name', foo='bar')
在這種情況下
HttpResponseRedirect(reverse('mainpage:index'))
與:
redirect('mainpage:index')
是一樣的,使用Redirect更簡單,不用導入,不用手動反查,不用去記很長的一段名字
傳遞要重定向的一個硬編碼的URL:
假設有當前路徑http://www.baidu.com/path
/xx/yy 根路徑下的xx/yy 即為http://www.baidu.com/xx/yy
xx/yy 將當前路徑添加xx/yy 即為http://www.baidu.com/path/xx/yy
完整的路徑 轉到完整的路徑下 如:http://www.baidu.com/ 將跳轉到首頁