Django-檢視層(view)
阿新 • • 發佈:2018-11-08
檢視層(view)
檢視函式,簡稱檢視,本質上是一個簡單的Python函式,它接受Web請求並且返回Web響應。響應的內容可以是HTML網頁,重定向,404錯誤,圖片等任何東西,但本質是返回響應物件HttpResponse。
檢視函式的程式碼寫哪裡都可以,但一般約定俗成設定在專案或應用程式目錄中的views.py檔案中
檢視案例:
from django.shortcuts import render, HttpResponse, HttpResponseRedirect, redirect import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
解析:
- 從
django.shortcuts
模組匯入了HttpResponse
類,以及Python的datetime
庫。 - 定義了
current_datetime
函式。它就是檢視函式。每個檢視函式都使用HttpRequest
物件作為第一個引數,並且通常稱之為request
。 檢視函式的名字能反映除它的功能即可 - 檢視函式最後返回
HttpResponse
物件,其中包含生成的響應。每個檢視函式都負責返回一個HttpResponse
物件。
一、HttpRequest物件
請求物件(request)的屬性:
django將請求報文中的請求行、首部資訊、內容主題封裝成HttpRequest類中的屬性。除特殊說明外,其他均為只讀
1. request.POST # 前臺Post傳過來的資料,包裝到POST字典中 2. request.GET # 前臺瀏覽器窗口裡攜帶的資料,包裝到GET字典中 3. request.method # 前臺請求的方式 4. request.body # post提交的資料,body體的內容,前臺會封裝成:name=lqz&age=18&sex=1 5. request.path # 取出請求的路徑,取不到資料部分 6. request.encoding #一個字串,表示提交的資料的編碼方式,預設'utf-8' 7. request.META #一個標準的Python 字典,包含所有的HTTP 首部 CONTENT_LENGTH —— 請求的正文的長度(是一個字串)。 CONTENT_TYPE —— 請求的正文的MIME 型別。 HTTP_ACCEPT —— 響應可接收的Content-Type。 HTTP_ACCEPT_ENCODING —— 響應可接收的編碼。 HTTP_ACCEPT_LANGUAGE —— 響應可接收的語言。 HTTP_HOST —— 客服端傳送的HTTP Host 頭部。 HTTP_REFERER —— Referring 頁面。 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_ 字首。 --------------------------------- 8. request.FILES #包含所有的上傳檔案資訊。 9. request.COOKIES #字典格式,鍵和只都是字串,包含所有的cookie 10. request.session #當前會話,只有當django啟用會話時才可用 11. request.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。
注:FILES 只有在請求的方法為POST 且提交的