視圖層

1、HttpRequest對象

request屬性

#request.method
        一個字符串,表示請求使用的HTTP 方法。必須使用大寫。
     例如:"GET""POST"

# request.GET
        一個相似字典的對象
        前臺瀏覽器窗口裏攜帶的數據,包裝到GET對象(字典)中

#request.POST
  一個相似於字典的對象,若是請求中包含表單數據,則將這些數據封裝成 QueryDict 對象。#如:<QueryDict: {'name': ['pdun'], 'pwd': ['888']}>

  POST 請求能夠帶有空的 POST 字典 —— 若是經過 HTTP POST 方法發送一個表 
      單,可是表單中沒有任何的數據,QueryDict 對象依然會被建立。
      所以,不該該使用 if request.POST  來檢查使用的是不是POST 方法;應該使用
       if request.method == "POST"
  另外:若是使用 POST 上傳文件的話,文件信息將包含在 FILES 屬性中。

#request.body
        一個字符串,表明請求報文的主體。
        #如:b'name=pdun&pwd=888'
        在處理非 HTTP 形式的報文時很是有用,例如:二進制圖片、XML,Json等。
        可是,若是要處理表單數據的時候,推薦仍是使用 request.POST 。

    
#request.path
        取出請求的路徑,取不到?後的數據部分
     想要取出全部內容,用get_full_path()方法
經常使用屬性
#請求頭中的全部內容,包含在一個大字典中
    CONTENT_LENGTH —— 請求的正文的長度(是一個字符串)。
    CONTENT_TYPE —— 請求的正文的MIME 類型。
    HTTP_ACCEPT —— 響應可接收的Content-Type。
    HTTP_ACCEPT_ENCODING —— 響應可接收的編碼。
    HTTP_ACCEPT_LANGUAGE —— 響應可接收的語言。
    HTTP_HOST —— 客服端發送的HTTP Host 頭部。
    HTTP_REFERER ——跳轉前的頁面。
    HTTP_USER_AGENT —— 客戶端的user-agent 字符串。
    QUERY_STRING —— 單個字符串形式的查詢字符串(未解析過的形式)。
    REMOTE_ADDR —— 客戶端的IP 地址。
    REMOTE_HOST —— 客戶端的主機名。
    REMOTE_USER —— 服務器認證後的用戶。
    REQUEST_METHOD —— 一個字符串,例如"GET""POST"。
    SERVER_NAME —— 服務器的主機名。
    SERVER_PORT —— 服務器的端口(是一個字符串)。
   從上面能夠看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 以外,請求中的任何 HTTP 首部轉換爲 META 的鍵時,
    都會將全部字母大寫並將鏈接符替換爲下劃線最後加上 HTTP_  前綴。
    因此,一個叫作 X-Bender 的頭部將轉換成 META 中的 HTTP_X_BENDER 鍵。
request.META屬性
9.HttpRequest.COOKIES

  一個標準的Python 字典,包含全部的cookie。鍵和值都爲字符串。



10.HttpRequest.session

   一個既可讀又可寫的相似於字典的對象,表示當前的會話。只有當Django 啓用會話的支持時纔可用。
    完整的細節參見會話的文檔。


11.HttpRequest.user(用戶認證組件下使用)

  一個 AUTH_USER_MODEL 類型的對象,表示當前登陸的用戶。

  若是用戶當前沒有登陸,user 將設置爲 django.contrib.auth.models.AnonymousUser 的一個實例。你能夠經過 is_authenticated() 區分它們。

    例如:

    if request.user.is_authenticated():
        # Do something for logged-in users.
    else:
        # Do something for anonymous users.


       user 只有當Django 啓用 AuthenticationMiddleware 中間件時纔可用。

     -------------------------------------------------------------------------------------

    匿名用戶
    class models.AnonymousUser

    django.contrib.auth.models.AnonymousUser 類實現了django.contrib.auth.models.User 接口,但具備下面幾個不一樣點:

    id 永遠爲None。
    username 永遠爲空字符串。
    get_username() 永遠返回空字符串。
    is_staff 和 is_superuser 永遠爲False。
    is_active 永遠爲 False。
    groups 和 user_permissions 永遠爲空。
    is_anonymous() 返回True 而不是False。
    is_authenticated() 返回False 而不是True。
    set_password()、check_password()、save() 和delete() 引起 NotImplementedError。
    New in Django 1.8:
    新增 AnonymousUser.get_username() 以更好地模擬 django.contrib.auth.models.User。
其餘屬性

request經常使用方法

#1.HttpRequest.get_full_path()

  取出請求的路徑,能取到?後的數據部分
  例如:"/music/bands/the_beatles/?print=true"
  注意和path的區別

#2.HttpRequest.is_ajax()

  若是請求是經過XMLHttpRequest 發起的,則返回True,方法是檢查 HTTP_X_REQUESTED_WITH 相應的首部是不是字符串'XMLHttpRequest'。

  大部分現代的 JavaScript 庫都會發送這個頭部。若是你編寫本身的 XMLHttpRequest 調用(在瀏覽器端),你必須手工設置這個值來讓 is_ajax() 能夠工做。

  若是一個響應須要根據請求是不是經過AJAX 發起的,而且你正在使用某種形式的緩存例如Django 的 cache middleware,
   你應該使用 vary_on_headers('HTTP_X_REQUESTED_WITH') 裝飾你的視圖以讓響應可以正確地緩存。
View Code

 

2、HttpRespone對象  (朝前臺發送數據的對象)

 

#from django.shortcuts import render,HttpResponse,redirect

 

#HttpResponse(‘OK’)
   返回字符串

#render(request,HTML,locals)   #locals把當前名稱空間的名字傳給前端

#redirect('http://www.baidu.com/')   重定向
1)301和302的區別。

  301和302狀態碼都表示重定向,就是說瀏覽器在拿到服務器返回的這個狀態碼後會自動跳轉到一個新的URL地址,這個地址能夠從響應的Location首部中獲取
  (用戶看到的效果就是他輸入的地址A瞬間變成了另外一個地址B)——這是它們的共同點。

  他們的不一樣在於。301表示舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜索引擎在抓取新內容的同時也將舊的網址交換爲重定向以後的網址;

  302表示舊地址A的資源還在(仍然能夠訪問),這個重定向只是臨時地從舊地址A跳轉到地址B,搜索引擎會抓取新的內容而保存舊的網址。 SEO302好於301

 

2)重定向緣由:
(1)網站調整(如改變網頁目錄結構);
(2)網頁被移到一個新地址;
(3)網頁擴展名改變(如應用須要把.php改爲.Html或.shtml)。
        這種狀況下,若是不作重定向,則用戶收藏夾或搜索引擎數據庫中舊地址只能讓訪問客戶獲得一個404頁面錯誤信息,訪問流量白白喪失;再者某些註冊了多個域名的
    網站,也須要經過重定向讓訪問這些域名的用戶自動跳轉到主站點等。
重定向301和302的區別

 

3、JsonResponse

#導入
from django.http import JsonResponse

 #能夠本身轉json格式,也能夠經過JsonResponse,php

#須要注意的是,JsonResponse默認僅支持字典格式,可修改safe=False來支持其餘格式

例如:
from django.shortcuts import render,HttpResponse,redirect from django.http import JsonResponse # Create your views here. def login(request): dic={'name':'pdun',"age":1} li = [1, 2, 3, 4] import json # return HttpResponse(json.dumps(dic)) # return JsonResponse(dic) # return HttpResponse(json.dumps(li)) # return JsonResponse(li) return JsonResponse(li,safe=False)

 

    def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,
                 json_dumps_params=None, **kwargs):
        if safe and not isinstance(data, dict):   
               #and關係,
            raise TypeError(
                'In order to allow non-dict objects to be serialized set the '
                'safe parameter to False.'
            )
JsonResponse源碼,爲何改變safe可支持其餘數據類型
相關文章
相關標籤/搜索