1. 程式人生 > >Django-Views模塊詳解

Django-Views模塊詳解

imp 接受 tput page 頭信息 from 常用方法 -h post方法

http請求中產生的兩個核心對象

技術分享

http請求: HttpRequest http響應: HttpResponse 所在位置 django.http

httpRequest屬性:

  HttpRequest.path

    請求頁面的全路徑,不包含域名---完整的請求路徑,不包括域 例: "/music/bands/the_beatles/"。


-  HttpRequest.method
請求中使用的HTTP方法的字符串表示。全大寫表示。例如

    if request.method == ‘GET‘:
        do_something()
    elif request.method == ‘POST‘:
        do_something_else()

HttpRequest.GET

    GET請求對象,包含HTTP GET參數的類字典對象,詳細查看 QueryDict文檔

HttpRequest.POST

    POST請求對象,包含HTTP GET參數的類字典對象,詳細查看 QueryDict文檔,

    服務器收到空的post請求的情況也是可能發生的,也就是說,表單from通過http post
    方法提交請求,單是表單中可以沒有數據。因此,不能使用禦酒 if request.POST來判斷
    是否使用HTTP POST方法,應該使用if request.method == "POST" (參見本表的method
    屬性)。
    註意: POST不包含file-upload(文件上傳)信息,請看 FILES

HttpRequest.REQUEST  django 1.8之後被廢棄了

    為了方便,該屬性是POST和GET屬性的集合體,但是有特殊性,先
    找到POST屬性,然後在查找GET屬性。借鑒PHP`s$_REQUEST。

    例如,如果GET={"name":"john"}和POST={"age":‘34‘},冊 REQUEST[‘name‘]
    的值為"jhon",REQUEST["age"]的值是‘34‘.

    強烈建議使用GET and POST,因為這兩個屬性更加顯示化,寫出來的代碼更易於
    理解

HttpRequest.COOKIES

    包含所有cookies的標準 python字典對象,keys 和values都是字符串 參見12章 有關於
    cookies更詳細的講解

-  HttpRequest.FILES

    包含所有上傳文件的類字典對象。FILES中每個KEY都是<input type="file" name=""/>
    標簽中的name屬性的值,FILES中每個value同事也是一個標準的python字典對象,包
    含下面三個Keys:
        1. filename 上傳文件名,用python字符串表示
        2. content-type 上傳文件的Content type
        3. content 上傳文件的原始內容
    註意: 只有在請求方法是POST,並且請求頁面中<from>有enctype="multipart/frm-data"
    屬性時FILES才擁有數據。否則FILES是一個空字典

- HttpRequest.META

    包含所有可用HTTP頭部信息的字典。例如:
        1. CONTENT_LENGTH
        2. CONTENT_TYPE
        3. QUERY_STRING:未解析的原始查詢字符串
        4. REMOTE_ADDR:客戶端主機名
        5. SERVER_NAME:服務器主機名
        6. SERVER_PORT :服務器端口
    META中寫著頭加上前綴HTTP_ KEY 例如:
        1. HTTP_ACCEPT_ENCODING
        2. HTTP_ACCEPT_LANGUAGE
        3. HTTP_POST 客戶發送的HTTP主機頭信息
        4. HTTP_REFERER:referring頁面
        5. HTTP_USER_AGENT:客戶端的user-agent字符串
        6. HTTP_X_BENDER:X-Bender頭部信息

- HttpRequest.user

    是from django.contrib.auth.models.User對象,代表當前登錄的用戶,如果訪問用戶當前沒有
    登錄,user將被初始化為from django.contrib.auth.models.AnonymousUser的實例。
    你可以通過user的is_authenticated()方法來辨別用戶是否登錄
    if request.user.is_authenticated():
         do something for logged-in users
    else:
         do something for anonymous users
    只有激活django中的 A  uthenticationMiddleware時該屬性才可用

- HttpRequest.session

    唯一可讀寫的屬性,代表當前回話的字典對象,只有激活django中的
    session支持是該屬性才可用

-raw_post_data

    原始HTTP POST數據,未解析過。改機處理時會有用。

- HtppRequest對象的方法部分
    1. get_full_path()
    返回包含查詢字符串的請求路徑。例如,
    "/music/bands/the_beatles/?print=true"。
    2. QueryDict對象
    get()   如果key對應多個value,get()返回最後一個value。
    在httprequest對象中,GET和POST屬性時 django.http.QueryDict類的實例。

HttpResponse

對於Httprequest對象來說 django自動創建,但是 httpresponse對象必須 我們自己創建 每個View方法必須返回一個HTTPResponse對象。 HTTPResponse類在django.http.HttpResponse.render方法包裝的也是一個response對象。

構造HtppResponse:

response = HttpResponse("Here‘s the text of the Web page.")

response = HttpResponse("Text only,please.",mimetype="text/plain")

HtppResponse的子類 部分

  • HttpResponseRedirect

    構造函數接受單個參數:重定向到URL。可以是全URL(e.g.,‘http://search.yahoo.com/‘) 或者相對URL(e.g.,‘/seach/‘).註意折返回HTTP狀態碼302

  • HttpResponsePermanentRedirect

    同HttpResponseRedirect一樣,但它返回永久重定向(HTTP狀態代碼301)而不是“找到”重定 向(狀態代碼302)。

  • HttpResponseNotModified

    構造函數不接受任何參數,也不會在此響應中添加任何內容。用於指定自用戶最後一次請求 (狀態代碼304)以來頁面尚未被修改。

  • HttpResponseBadRequest

    HttpResponse使用的就是使用400狀態碼。

  • HttpResponseNotFound

    返回404狀態碼

  • JsonResponse

    返回Json字符串

詳見: https://docs.djangoproject.com/en/1.11/ref/request-response/

  • httpresponse對象上擴展的常用方法

render rander_to_response redirect 跳轉的方法 更多詳見: https://docs.djangoproject.com/en/1.11/topics/http/shortcuts/

三. 常用的其他方法

locals() 可以直接將函數中所有變量全部傳遞給模板

Django-Views模塊詳解