Python Django基礎教程(五)(表單)

HuangZhang_123發表於2017-04-27

本人新書《玩轉Python網路爬蟲》,可在天貓、京東等商城搜尋查閱或通過右側圖書連結購買,專案深入淺出,適合爬蟲初學者或者是已經有一些網路爬蟲編寫經驗,但希望更加全面、深入理解Python爬蟲的開發人員。


Django版本:1.11
作業系統:Windows
Python:3.5
歡迎加入學習交流QQ群:657341423


Django表單
表單的意思就是通常我們在網頁上看到使用者註冊,使用者登入這型別介面,基本上都輸入資訊,然後點選確定。這樣就能輸入的資訊提交到伺服器了,然後伺服器通過網頁形式返回結果。這就是表單。

實現表單功能有兩種方式:
第一種就是直接在html檔案上寫表單,如果一個表單要顯示內容,就只能通過引數形式展示出來。
第二種就是用django的表單類。
兩者優劣:
第二種比第一種更有優勢,在檢驗資料格式,資料型別設定方面更有優勢。
第一種比第二種更容易掌握。容易上手,但程式碼比較冗餘,不便於管理。


專案目錄:
這裡寫圖片描述


第一種:html檔案上寫表單
在polls目錄下的urls.py檔案下設定新的url
這裡寫圖片描述

在polls目錄下的新建檔案Search.html,輸入程式碼:
這裡寫圖片描述
這裡解釋一下:

action="/polls/postsearch/":post之後跳轉到的url,django通過這個url去查詢urls.py裡面對於的view。
如果action=""代表post(get)之後跳轉到的url為原來的url。
method="post":這個是http的方法。大部分都是post和get
type="submit":通過這個方法觸發表單提交的。

這裡的action="/polls/postsearch/"action="" 都是指向views.py裡面的Search,因為我的urls.py是這樣設定的。

注意:
上圖只是通過使用者輸入資訊,後臺獲取。但反過來的呢?如果後臺將資料顯示給使用者看。
這裡寫圖片描述
只需要加入value="{{ textvalue }}"即可

在polls目錄下的views.py檔案,Search程式碼如下:
這裡寫圖片描述
這裡寫圖片描述
解釋一下:
@csrf_exempt是對於中介軟體的遮蔽。如果沒有這個,可以在setting.py註釋'django.middleware.csrf.CsrfViewMiddleware',
如果不做這個的話,Post方式是禁止的。出現403的錯誤。這個涉及到系統安全性問題,這個後續會講到。

這段程式碼分別對post和get做了相應的處理。post的處理就比較簡單。看看get的。
通過獲取表單裡面name=’g’的值(非空),然後再去資料庫搜查是否符合這個條件的資料,然後返回相應的網頁。(這裡可以做個判斷,判斷這個資料是否空,然後執行不同的網頁顯示。)
如果表單的name=’g’的值為空,返回原來的網頁,並有紅色文字提示。

這裡涉及到results.html,先看看其程式碼:
這裡寫圖片描述

執行結果:
這裡寫圖片描述

post結果:
這裡寫圖片描述
這裡寫圖片描述
post的url變了。

get結果:
這裡寫圖片描述
資料庫資料
這裡寫圖片描述
結果:
這裡寫圖片描述
這裡寫圖片描述
url是沒有變的,只是多了引數。這是正常的。再對比資料庫資料是正常的。這裡有個疑問,能不能返回其他資料,例如返回city這個欄位,這個就只能設定models.py裡面的def __str__ 的返回值了。具體可以參考Python Django基礎教程(三)



第二種:django的表單類
這裡,新建一個webform.html檔案和form.py檔案。
目錄如下:
這裡寫圖片描述

設定urls.py檔案,這裡新增一個url路徑
這裡寫圖片描述

新增了url,肯定要在views.py新增一個對於的方法的。
這裡寫圖片描述
這裡寫圖片描述

再看form.py
這裡寫圖片描述
form.py的寫法和models.py寫法大同小異的。這裡定義Field等於網頁裡面的控制元件。

再看webform.html,因為長度有限,直接看主要內容。
這裡寫圖片描述

直接看結果再分析:
輸入http://127.0.0.1:8000/polls/webform/檢視
這裡寫圖片描述
1.發現輸入網址檢視是get方法。既views.py裡面這段程式碼
這裡寫圖片描述
這裡用法和後臺傳資料到前端的用法一樣的。都是用引數形式傳遞。

2.輸入資料,點選確定
這裡寫圖片描述
這裡寫圖片描述
這是用到post方法
這裡寫圖片描述
檢視資料庫是否插入資料
這裡寫圖片描述
插入成功。

django表單原理:其實就是將html裡面表單控制元件內容抽取出來,在django的form類中實現。然後以引數形式傳遞到html顯示出來。

擴充套件:
上述是將一個表單以table形式表現出來,但是某些情況下,我需要將各個控制元件根據自己喜好排放,這時候可以這樣做:
這裡寫圖片描述
這樣可以將每個控制元件用div形式分開,就可以根據排版擺放了。
這裡寫圖片描述


django.forms.ModelForm
首先看到Form的寫法,其實和models.py寫法是很相似的。這裡有個想法就是,models和Form能否合在一起使用。
例子:
先看html
這裡寫圖片描述
這裡只是改了一下form.name,因為之前的form.Pname的Pname是來自form的命名。

看一下Form.py
這裡寫圖片描述
model=Publisher將models.py賦予給model。fields是顯示資料。

看views.py
這裡寫圖片描述
可以對資料進行修改,新增基本操作。

優點:
使用ModelForm可以減小Form程式碼編寫,直接使用models.py的即可。
在資料上的新增和修改縮小程式碼的編寫,對比使用ModelForm和Form對應的views.py就知道程式碼縮減了很多。


專案程式碼下載

Django基礎教程總結:
首先使用者在瀏覽器輸入url,django會在urls.py根據url找到對應的views.py裡面的方法,通過這個方法返回那個html檔案給使用者瀏覽。使用者在瀏覽器輸入url相當於一次get的訪問。
如果用form表單功能,views的方法會處理form表單生成表格,然後當引數形式傳遞到html。
總的來說:views.py相當於一個控制中心,通過使用者輸入進行處理和分發任務。


Python Django基礎教程到這裡就全部講述完畢了,接下來是中高階的教程。

相關文章