Django 系列部落格(七)

2022-07-03 13:06:13 字數 3582 閱讀 2807

本篇部落格介紹 django 中的檢視層中的相關引數,httprequest 物件、httpresponse 物件、jsonresponse,以及檢視層的兩種響應方式 cbv 和 fbv,還有簡單的檔案上傳。

乙個檢視函式,簡稱檢視,是乙個簡單的python 函式,它接受web請求並且返回web響應。響應可以是一張網頁的html內容,乙個重定向,乙個404錯誤,乙個xml文件,或者一張. . . 是任何東西都可以。無論檢視本身包含什麼邏輯,都要返回響應。**寫在**也無所謂,只要它在你的python目錄下面。除此之外沒有更多的要求了——可以說「沒有什麼神奇的地方」。為了將**放在某處,約定是將檢視放置在專案或應用程式目錄中的名為views.py的檔案中。

下面是乙個返回當前日期和時間作為 html 文件的檢視:

return httpresponse(html)這段**解析:

注意,檢視函式的名稱並不重要;不需要用乙個統一的命名方式來命名,以便讓django識別它。我們將其命名為current_datetime,是因為這個名稱能夠精確地反映出它的功能。

在檢視層最重要的就是要熟悉兩個物件:請求物件(request)和響應物件(httpresponse)。

django 將請求報文中的請求行、請求頭、請求體封裝成 httprequest 類中的屬性。除了特殊說明之外,其他的均為唯讀屬性。

乙個類似於字典的物件,包含 http get 的所有引數。詳情請參考 querydict 物件。

乙個類似於字典的物件,如果請求中包含表單資料,則將這些資料封裝成 querydict 物件。

post 請求可以帶有空的 post 字典 —— 如果通過 http post 方法傳送乙個表單,但是表單中沒有任何的資料,querydict 物件依然會被建立。

因此,不應該使用 if request.post 來檢查使用的是否是post 方法;應該使用 if request.method == "post"

另外:如果使用 post 上傳檔案的話,檔案資訊將包含在 files 屬性中。

注意:鍵值對的值是多個的時候,比如checkbox型別的input標籤,select標籤,需要用:

但是,如果要處理表單資料的時候,推薦還是使用 httprequest.post 。

乙個字串,表示請求的路徑元件(不含網域名稱)。

例如:"/music/bands/the_beatles/"

乙個字串,表示請求使用的http 方法。必須使用大寫。

例如:"get"、"post"

乙個字串,表示提交的資料的編碼方式(如果為 none 則表示使用 default_charset 的設定,預設為 'utf-8')。

這個屬性是可寫的,你可以修改它來修改訪問表單資料使用的編碼。

接下來對屬性的任何訪問(例如從 get 或 post 中讀取資料)將使用新的 encoding 值。

如果你知道表單資料的編碼不是 default_charset ,則使用它。

乙個標準的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_ 字首。

所以,乙個叫做 x-bender 的頭部將轉換成 meta 中的 http_x_bender 鍵。

乙個類似於字典的物件,包含所有的上傳檔案資訊。

files 中的每個鍵為中的name,值則為對應的資料。

注意,files 只有在請求的方法為post 且提交的

from django.conf.urls import url

urlpatterns = [

url(r'^upload_file/$', views.uploadfile.as_view()),

]

class uploadfile(view):

def get(self, request):

return render(request, 'upload_file.html')

def post(self, request):

file = request.files.get('myfile')

# print(file['file'])

from django.core.files.uploadedfile import inmemoryuploadedfile

print(time.time())

filename = str(time.time()).split('.')[0] + file.name

with open(filename, 'wb') as f:

for line in file:

f.write(line)

return httpresponse('上傳成功')

Django 系列部落格(九)

本篇部落格介紹 django 模板的匯入與繼承以及匯入匯入靜態檔案的幾種方式。語法 如下 圖書管理系統 django 模板引擎中最強大的也是最複雜的除了 orm 就是模板繼承了。模板繼承可以讓您建立乙個基本的 骨架 模板,它包含您站點的全部元素,並且可以定義可以被子模板覆蓋的 blocks。通過下面...

Django 系列部落格(四)

本篇部落格介紹 django 如何和資料庫進行互動並且通過 model 進行資料的增刪查改 比如在大名鼎鼎的 pythonweb 框架 django 就是使用了物件關係對映,這個對應 django 中的 model檔案。from django.db import models create your...

Django搭建簡易部落格

django簡易部落格,主要實現了以下功能 連線資料庫 建立超級使用者與後台管理 利用django admin bootstrap美化介面 template,view與動態url markdown與 高亮 歸檔,aboutme和標籤分類 搜尋與readmore rss與分頁 需要新增的安裝包 要注意...