Django中的request.GET和request.POST
Django的views.py中定義的函式的requst引數,可以讀request.method確定是POST還是GET
首先,request.GET 和 request.POST是兩個物件,類字典物件,提供和字典類似的介面,也有一些別的介面。
什麼是POST和GET,這與HTTP協議有關:
參考這篇部落格:http://blog.csdn.net/gideal_wang/article/details/4316691
這篇部落格介紹了兩者從原理上和表現形式上的區別,非常清晰,如有需要可閱讀原文,下面是一點小結和摘錄:
1、POST和GET是HTTP協議定義的與伺服器互動的方法。GET一般用於獲取/查詢 資源資訊,而POST一般用於更新 資源資訊。還有另兩種方法是PUT和DELETE
2、POST和GET都可以與伺服器互動完成查、改、增、刪的操作。
3、
(1)GET提交,請求的資料會附在URL之後(就是把資料放置在HTTP協議頭中),以?分割URL和傳輸資料,多個引數用&連線;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。(一個簡單的url例子:http://127.0.0.1:8000/search/?q=Django 只有一個引數 所以沒用&)如果資料是英文字母/數字,原樣傳送,如果是空格,轉換為+,如果是中文/其他字元,則直接把字串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號以16進製表示的ASCII。
POST提交:把提交的資料放置在是HTTP包的包體中。上文示例中紅色字型標明的就是實際的傳輸資料
因此,GET提交的資料會在位址列中顯示出來,而POST提交,位址列不會改變
(2)傳輸資料的大小:首先宣告:HTTP協議沒有對傳輸的資料大小進行限制,HTTP協議規範也沒有對URL長度進行限制。
而在實際開發中存在的限制主要有:
GET:特定瀏覽器和伺服器對URL長度有限制,例如IE對URL長度的限制是2083位元組(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於作業系統的支援。
因此對於GET提交時,傳輸資料就會受到URL長度的限制。
POST:由於不是通過URL傳值,理論上資料不受限。但實際各個WEB伺服器會規定對post提交資料大小進行限制,Apache、IIS6都有各自的配置。
4、對於get方式,伺服器端用Request.QueryString獲取變數的值,對於post方式,伺服器端用Request.Form獲取提交的資料。
在Django Book中提到:
POST資料是來自HTML中的〈form〉標籤提交的,而GET資料可能來自〈form〉提交也可能是URL中的查詢字串(the query string)。
Django Book第七章給出的程式碼例子中,views.py的處理函式開始會驗證request.method是否為POST:
確認request.method的值是’POST’。使用者瀏覽表單時這個值並不存在,當且僅當表單被提交時這個值才出現。
(在後面的例子中,request.method將會設定為’GET’,因為在普通的網頁瀏覽中,瀏覽器都使用GET,而非POST)。判斷request.method的值很好地幫助我們將表單顯示與表單處理隔離開來。
如果在檢視裡通過POST獲取資料,那麼request.GET將為空。
使用request.POST.get()方法 可以獲取表單指定鍵的值內容 並可以在獲取表單內容的同時提供一個預設值防止該鍵對應的值為空
在Django中 request.POST常常和form物件一起用,用來初始化一個form 如下面所示 先判斷方法是否為POST 然後用request.POST對已有的Form物件ContactForm進行初始化。request.POST本身也是類字典物件,所以可以用於Form的初始化。
if request.method == 'POST':
form = ContactForm(request.POST)
附上一點摘記:
8)接受request的資料
從post中取得資料,如果不存在則預設值為1
pageNumber = request.POST.get('pageNumber',1)
從get中取得資料,如果不存在則預設值為1
pageNumber = request.GET.get('pageNumber',1)
從所有請求中取得資料,如果不存在則預設值為1
pageNumber = request.REQUEST.get('pageNumber',1)
判斷一個請求是post還是get方式
if request.method == 'GET':
對於request的操作可以參考
http://www.woodpecker.org.cn/obp/django/django-faq/request_response.html
對於GET和POST提供的方法可以參考
http://djangobook.py3k.cn/appendixH/
如get、copy等方法的註解
z愛
相關文章
- python request.post圖片和字典Python
- python request.post異常Python
- Django中values()和values_list()Django
- Django中的ORMDjangoORM
- Django中的QuerySetDjango
- Django中ORM外來鍵和表的關係(Django程式設計-4)DjangoORM程式設計
- Django中的元類Django
- django中orm的使用DjangoORM
- django 中 mysql 的 charset 配置DjangoMySql
- django中的url函式Django函式
- Django的檢視和模板Django
- django和flask的區別DjangoFlask
- Django框架簡介和建立django專案的基本流程Django框架
- 140 form自定錯誤和鉤子,django中cookie的使用ORMDjangoCookie
- Django REST framework中認證和許可權的使用方法DjangoRESTFramework
- Django中F函式的使用Django函式
- Django中的session常見配置DjangoSession
- Django REST Framework中的Serializer relationsDjangoRESTFramework
- django中嵌入html的語法DjangoHTML
- Django 中 REST API 的設計DjangoRESTAPI
- Django中的ForeignKeyDjango
- Django的下載和基本指令Django
- Django的Project和App的區別DjangoProjectAPP
- django-admin 和django-admin.py的區別Django
- Django中的函式make_password、set_password和check_passwordDjango函式
- Django中content_type的使用Django
- python django中restful框架的使用PythonDjangoREST框架
- Django 中 Aggregation聚合的使用Django
- Django form在模版中的渲染方式DjangoORM
- Django中的模板渲染是什麼Django
- Django的訊息中內嵌HTMLDjangoHTML
- Django模型中的save方法 精講Django模型
- Django中如何建立模型?Django模型
- django和apache互動的wsgi分析DjangoApache
- Django 和 struts 對比Django
- Django大咖之路: 深入理解Django建立物件的create和save方法Django物件
- Django中 render() 函式的使用方法Django函式
- Django中的內建訊號有哪些Django