當請求一個頁面時,Django 創建一個包含有關請求數據的 HttpRequest 對象,並將它作為第一個參數傳給視圖函數,每個視圖函數處理完相應邏輯后返回一個 HttpResponse 對象,HttpRequest 和 HttpResponse 都被定義於 django.http 模塊中。
HttpRequest 對象包含當前用戶、使用的瀏覽器、當前請求 URL 的一些信息等。
屬性 | 類型 | 說明 |
HttpRequest.body | str | |
HttpRequest.path | str | 除域名以外的請求路徑,以正斜杠開頭 |
HttpRequest.path_info | str | 在某些WEB服務器配置的URL,在主機名之后的部分被分成腳本前綴和路徑信息兩部分,而 path_info 就是表示路徑信息部分的。(腳本前綴可以在WEB服務器中設置) |
HttpRequest.method | str | HTTP請求的方式,值為 'GET' 或 'POST' |
HttpRequest.encoding | ||
HttpRequest.GET | django.http.QueryDict (dict 的子類) | 鍵可重復,相當於c++的 multimap |
HttpRequest.POST | django.http.QueryDict | 鍵可重復,相當於c++的 multimap |
HttpRequest.REQUEST | django.http.QueryDict | 可以替代 HttpRequest.GET 和 HttpRequest.POST 的使用,不需要分清是GET還是POST即可獲取數據,推薦使用。 |
HttpRequest.COOKIES | dict | 鍵值都是 str |
HttpRequest.FILES | 類 dict | 包含所有上傳文件。鍵是 <input type='file' name=""> 中name,值是一個 UploadedFile 對象。 |
HttpRequest.META | dict | 包含所有本次HTTP請求的 Header 信息,如用戶IP和瀏覽器信息等。 |
HttpRequest.user | AUTH_USER_MODEL | 必須安裝了 AuthenticationMiddleware 才可用 |
HttpRequest.session | 類 dict | 可讀可寫,表示當前會話,僅當 django 安裝了 session 支持時可用 |
HttpRequest.urlconf | ||
HttpRequest.resolver_match |
def search(request): errors = [] if request.REQUEST.get('uid'): return render_to_response('result.html',{'query':request.REQUEST.get('uid')}) elif 'uid' in request.REQUEST: errors.append('uid is null') return render_to_response('search.html',{'errors':errors}) else: return render_to_response('search.html',{'errors':errors})
應每次都給成功的GET 或 POST 請求(如果會改動數據庫中數據的話)做重定向,這就是web開發的最佳實踐。
django 自帶一個 form 庫,稱為 django.forms,它可以進行表單顯示、表單驗證、當驗證失敗時重新顯示表單、將表單數據轉化成相關python類型:
#coding:utf-8 from django import forms from django.conf import settings settings.configure() class MyForm(forms.Form): uid = forms.IntegerField(required=True) name = forms.CharField(required=True,widget=forms.Textarea,label='姓名',max_length=10) def clean_uid(self): uid = self.cleaned_data['uid'] if uid<0: raise forms.ValidationError('uid 不能為負數!') return uid f = MyForm({'uid':-3,'name':'tianya'}) print '輸出MyForm對象:%s' %f print '綁定:%s' %f.is_bound print '驗證:%s' %f.is_valid() print '錯誤:%s' %f.errors print 'uid字段的錯誤:%s' %f['uid'].errors print '整理后的可用數據:%s' %f.cleaned_data
如果要復用 django 中定義好的 model ,可以使用 ModelForm,以避免重復模型描述。