
## WSGIRequest對象
Django在接收到http請求之后,會根據http請求攜帶的參數以及報文信息創建一個WSGIRequest對象,并且作為視圖函數第一個參數傳給視圖函數。也就是我們經常看到的request參數。在這個對象上我們可以找到客戶端上傳上來的所有信息。這個對象的完整路徑是django.core.handlers.wsgi.WSGIRequest。
### WSGIRequest對象常用屬性
WSGIRequest對象上大部分的屬性都是只讀的。因為這些屬性是從客戶端上傳上來的,沒必要做任何的修改。
<ol>
<li><code>path</code>:請求服務器的完整“路徑”,但不包含域名和參數。比如<code>http://www.baidu.com/xxx/yyy/</code>,那么<code>path</code>就是<code>/xxx/yyy/</code>。 </li>
<li><code>method</code>:代表當前請求的<code>http</code>方法。比如是<code>GET</code>還是<code>POST</code>。 </li>
<li><code>GET</code>:一個<code>django.http.request.QueryDict</code>對象。操作起來類似于字典。這個屬性中包含了所有以<code>?xxx=xxx</code>的方式上傳上來的參數。 </li>
<li><code>POST</code>:也是一個<code>django.http.request.QueryDict</code>對象。這個屬性中包含了所有以<code>POST</code>方式上傳上來的參數。 </li>
<li><code>FILES</code>:也是一個<code>django.http.request.QueryDict</code>對象。這個屬性中包含了所有上傳的文件。 </li>
<li><code>COOKIES</code>:一個標準的Python字典,包含所有的<code>cookie</code>,鍵值對都是字符串類型。 </li>
<li><code>session</code>:一個類似于字典的對象。用來操作服務器的<code>session</code>。 </li>
<li><p><code>META</code>:存儲的客戶端發送上來的所有<code>header</code>信息。</p>
</li>
<li><p><code>CONTENT_LENGTH</code>:請求的正文的長度(是一個字符串)。</p>
</li>
<li><code>CONTENT_TYPE</code>:請求的正文的MIME類型。</li>
<li><code>HTTP_ACCEPT</code>:響應可接收的Content-Type。</li>
<li><code>HTTP_ACCEPT_ENCODING</code>:響應可接收的編碼。</li>
<li><code>HTTP_ACCEPT_LANGUAGE</code>: 響應可接收的語言。</li>
<li><code>HTTP_HOST</code>:客戶端發送的HOST值。</li>
<li><code>HTTP_REFERER</code>:在訪問這個頁面上一個頁面的url。</li>
<li><code>QUERY_STRING</code>:單個字符串形式的查詢字符串(未解析過的形式)。</li>
<li><code>REMOTE_ADDR</code>:客戶端的IP地址。如果服務器使用了<code>nginx</code>做反向代理或者負載均衡,那么這個值返回的是<code>127.0.0.1</code>,這時候可以使用<code>HTTP_X_FORWARDED_FOR</code>來獲取,所以獲取<code>ip</code>地址的代碼片段如下:<pre><code class="lang-python"> <span class="hljs-keyword">if</span> request.META.has_key(<span class="hljs-string">'HTTP_X_FORWARDED_FOR'</span>):
ip = request.META[<span class="hljs-string">'HTTP_X_FORWARDED_FOR'</span>]
<span class="hljs-keyword">else</span>:
ip = request.META[<span class="hljs-string">'REMOTE_ADDR'</span>]
</code></pre>
</li>
<li><code>REMOTE_HOST</code>:客戶端的主機名。</li>
<li><code>REQUEST_METHOD</code>:請求方法。一個字符串類似于<code>GET</code>或者<code>POST</code>。</li>
<li><code>SERVER_NAME</code>:服務器域名。</li>
<li><code>SERVER_PORT</code>:服務器端口號,是一個字符串類型。</li>
</ol>
### WSGIRequest對象常用方法
<ol>
<li><code>is_secure()</code>:是否是采用<code>https</code>協議。</li>
<li><code>is_ajax()</code>:是否采用<code>ajax</code>發送的請求。原理就是判斷請求頭中是否存在<code>X-Requested-With:XMLHttpRequest</code>。</li>
<li><code>get_host()</code>:服務器的域名。如果在訪問的時候還有端口號,那么會加上端口號。比如<code>www.baidu.com:9000</code>。</li>
<li><code>get_full_path()</code>:返回完整的path。如果有查詢字符串,還會加上查詢字符串。比如<code>/music/bands/?print=True</code>。</li>
<li><code>get_raw_uri()</code>:獲取請求的完整<code>url</code>。</li>
</ol>
- 空白目錄
- 1-Django前導知識
- 1-1-虛擬環境
- 1-2-Django框架介紹與環境搭建
- 2-URL與視圖
- 2-1-URL與視圖
- 3-模板
- 3-1-模板介紹
- 3-2-模板變量
- 3-3-常用標簽
- 3-4-模板常用過濾器
- 3-5-模板結構優化
- 3-6-加載靜態文件
- 4-數據庫
- 4-1-操作數據庫
- 4-2-圖書管理系統
- 4-3-ORM模型介紹
- 4-4-ORM模型的增刪改查
- 4-5-模型常用屬性
- 4-6-外鍵和表
- 4-7-查詢操作
- 4-8-QuerySet的方法
- 4-9-ORM模型練習
- 4-10-ORM模型遷移
- 5-視圖高級
- 1-Django限制請求method
- 2-頁面重定向
- 3-HttpRequest對象
- 4-HttpResponse對象
- 5-類視圖
- 6-錯誤處理
- 6-表單
- 1-用表單驗證數據
- 2-ModelForm
- 3-文件上傳
- 7-session和cookie
- 1-session和cookie
- 8-memcached
- 1-memcached
- 9-阿里云部署
- 阿里云部署