Python Django基礎教程(五)(表單)
本人新書《玩轉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基礎教程到這裡就全部講述完畢了,接下來是中高階的教程。
相關文章
- Django基礎五之django模型層(一)單表操作Django模型
- Django框架表單基礎Django框架
- Django基礎五之AjaxDjango
- Django基礎五之django模型層(二)多表操作Django模型
- 《Django基礎教程》讀後感Django
- Django基礎教程之介紹Django
- Django基礎教程之工程搭建Django
- python基礎(五)Python
- Django基礎教程之初體驗Django
- Python基礎教程Python
- python基礎學習五Python
- Python基礎教程.18214570Python
- Python Numpy基礎教程Python
- python基礎教程|菜鳥教程Python
- Django——表單Django
- Python基礎面試題30問!Python基礎教程Python面試題
- Django基礎教程之配置檔案詳解Django
- Django基礎教程之請求與相應Django
- Django基礎Django
- 【Python基礎知識】Django框架簡介PythonDjango框架
- 《Python 基礎篇》五:函式Python函式
- 五、Python函式之基礎Python函式
- 【莫煩】python基礎教程Python
- python-基礎教程-pprintPython
- (JS基礎)操作表單JS
- Python-matplotlib-入門教程(一)-基礎圖表繪製Python
- python django整理(三)頁面基礎(仿BBS)PythonDjango
- Gurobi基礎教程(Python版)-系列教程2Python
- django基礎(一)Django
- Django基礎流程Django
- django 基礎指令Django
- (Python基礎教程之七)Python字串操作Python字串
- 【WEB基礎】HTML & CSS 基礎入門(8)表單WebHTMLCSS
- Python 爬蟲零基礎教程(1):爬單個圖片Python爬蟲
- Django ORM 單表操作DjangoORM
- Python基礎知識之Django框架優缺點!PythonDjango框架
- Django-基礎-1Django
- 01.Django-基礎Django
- Python的基礎學習(五):運算子Python