用戶提交信息,通常是經過表單實現,css
數據操做提交,通常是經過表單作的
表單提交信息到服務器而後服務器進行處理
django forms是Django的表單處理庫。依賴HttpRequest,它具備以下特色:html
(1)、快速自動生成HTML表單前端
(2)、表單數據校驗python
(3)、錯誤信息提示django
(4)、自動轉換爲python數據格式bootstrap
html
<form action=''>
<form>
html的表單
僅僅爲一個表單,不帶驗證,數據處理等功能
在Django 的 form中,是一個通過封裝的表單對象,能夠經過它生成用戶想要填寫的表單,有強大的功能
一、默認提供的表單樣式太醜了,不符合個人項目需求能改嗎?
能夠的
二、爲何要使用django的表單呢?
在Django 的 form中,是一個通過封裝的表單對象,能夠經過它生成用戶想要填寫的表單,有強大的功能
自帶有驗證,數據處理的功能
三、django的form是html中的form嗎?
Django的form最終會生成html的form,但
有區別,功能更增強大,做用不一樣,
modelForm:是和Model綁定的,數據模型,modelForm會自動匹配model裏面的字段,而後生成相應的html表單,相關驗證和處理的功能能在這個過程完成
Form:自定義Form
能夠根據本身的須要設定本身的Form
一個用戶可能會有多個表單,因此採用一個單獨的form.py模塊來進行管理
使用的時候須要引用
如 form form import FeedbackForm
from models importFeedback
classFeedbackForm(forms.ModelForm):
classMeta:
model =Feedback 在這裏設置須要綁定的model
fields = ('name','email','message',) 指定顯示字段信息
html中
{{ feedback_form.as_p }}以p標籤的方式生成
<body>
<formmethod='post'>
{{ feedback_form.as_p }}
沒有生成form須要本身加上去
<inputtype='submit'value='Send'>
</form>
</body>
表單驗證不經過,會把錯誤信息直接返回給頁面
feedbacj_form = FeedbackForm(request.POST) ????
model裏面的EmailField能夠驗證郵箱格式
form 模型使得保存model數據很是方便
a = Feedback()
a.name = 'sss'
a.email = 'fff'
a.save()
feedback_form.save() 表單和model是綁定的,調用這個方法時,會讓綁定的
model進行處理,保存數據
url(r'^update/(?p<id>\d)/$','form.views.update',name='update')
instance爲實例參數,告訴form當前的操做對象
feedback_form = FeedbackForm(instance=feedback)傳入實例,表單進行分析,
生成相應html代碼
若是不這麼綁定直接生成的話保存後會生成新的數據,若是綁定,就是對所綁定的實例進行修改
forms.py太醜,能夠直接在form 模型上添加css和js屬性,能夠和bootstrap實現form界面
html當中提示的內容placeholder顯示出來
多對多能夠多選
多選狀況:choices=((1,'aaa'),(2,'bbb'))
choices = ((c.id,c.name) for c in Category.objects.all())
feedback_form.fields['subject'].choices = choices
須要在form裏面指定默認的屬性
Form比modelForm更方便實現前端的頁面,方便的添加css和js.
沒有寫action默認提交給當前頁
用initial進行初始化
驗證順序:
默認驗證
clean_字段名()
clean()
form當中定義錯誤信息
error_messages={'invalid':'請輸入正確的Email格式'}
當表單以method = 'post'提交的時候會出現的問題,加一個crsf就能夠了
<form method="post">
{% csrf_token %}
email = feedback_form.cleaned_data['email']
date是日期,data是數據
若是一個Form實體的數據是合法的,它就會有一個可用的cleaned_data屬性。 這是一個包含乾淨的提交數據的字典,咱們要報取數據的時候,就用這個,如上面代碼中的print fr.cleaned_data['ip']