在django中實現表單

http://forreal.blog.51cto.com/3205122/586035

 

最近用Django 寫了一個網站,現在來分享一下對Django form 的一些心得。

 

一,創建一個表單

創建一個Form表單有兩種方式:

第一種方式是繼承於forms.Form的一個子類,通過在form中選擇你需要的類型來規定表單之

中字段的類型

class ContactForm(forms.Form):

    subject = forms.CharField(max_length=100)

    message = forms.CharField(required=False)

其中 django 內置了很多的字段,讓開發者可以直接使用,並且內置了這些字段的檢驗使站點中的表單數據檢測變得方便,也提供了一些可選擇的檢驗規則如required=False等,具體的可以去Django 官網查詢API。

 

第二種 是直接利用數據庫中以有的表來生成表單項, 這對於一個管理系統類型的網站 比較有用,因爲如果一個站點有大量的實體數據需要讓用戶輸入,那麼就不必重新花費時間來定義表單,只需要直接的和 model 進行關聯就可以瞭如:

 

class BookForm(ModelForm):

    class Meta:

        model = Book

這樣就可以 直接將 book 中的所有字段 直接生成一張 與之對應的表單,也許你不想所有的模型中的字段用戶都可以填寫,那麼你可以用

 

 

class Meta:

        model = Author

        fields = ('name', 'title')

 

 

class Meta:

        model = Author

        exclude = ('birth_date',)

exclude 屬性來規定哪些字段你不想加入在表單之中。

fields屬性來規定哪些你要加入表單之中,當然兩個屬性,你只要設定一個就可以了

 

二,修飾這個表單

因爲用django自動生成的表單,實現的內容很多是你不想要的,所以要創造一個獨特的表。

 

改變字段在模板中顯示的類型

你繼承於ModelForm來創建一個表單的話,Django會自動的將外鍵字段轉化成一個select的控件,並且通過下拉框來選擇一個值,這可能是你不想要的,因爲你可能不希望用戶來填寫外鍵的內容,這些外鍵的內容是系統自動關聯分配的,所以,你就必須更改表單項的實現方式。

model = Author

 

        fields = ('name', 'title', 'birth_date')

        widgets = {

            'name': Textarea(attrs={'cols': 80, 'rows': 20}),

        }

通過widgets這個參數,手動的設定字段以何種input類型顯示

更改報錯信息

在django表單系統之中,如果在處理表中中 使用 is_valid()  

方法並且表單檢測發現表單內容不符合規則,那麼他將返回一個表單,表單之中沒一樣中 form.name.errors 就是報錯信息,雖然現在在服務器端檢驗表單字段的實用價值已經越來越小了,但是 俗話說, 永遠不要相信前臺腳本,永遠不要相信用戶,他們很可能利用你沒有後臺檢驗的功能而 搞出很多的事情來,所以儘管前臺已經做了檢驗,但是後臺仍然要做一次檢驗,更改默認的報錯信息是這樣的

 name = forms.CharField(error_messages={'required': 'Please enter your name'})

 

在創建這個 表單的時段的時候 傳入如下的參數,就可以修改報錯信息,當然你必須知道具體錯誤的名稱 如“requeired”這些名稱可以在API 中找到

三,使用這個表單

在視圖中使用

在視圖中使用一個表單 無非是兩種功能,一個是創建一個表單讓用戶來填寫信息,另一個是處理表單中的數據。

創建一個表單 就是直接創建一個 實體表單的對象

form = ContactForm(),裏面有幾個比較重要的參數:auto_id=False

這個參數 主要是表示 是否在表單中生成 id ,因爲有的時候你不想讓你每個表單的字段都對應一個id, 如果生成 默認id是 id_form字段名字

 

設置默認值

可以在創建 表單對象時傳入如下參數initial={}

這是一個字典參數,對應每個字段的默認值, 可以在定義表的時候在沒定義一個時段 中添加 initial='http://' 來設定默認值

 更新數據

 你可能需要 用一個 model實例來初始化他,這樣就可以達到表單更新數據 

f = ArticleForm(instance=a) 其中 a 是article 的一個model實例。

 

提取數據

 

在 處理 post 請求時候, 通過 f = ArticleForm(request.POST)來獲取一個填有用戶數據的form 

在調用了 is_valid 方法以後 就可以通過 f.cleaned_data ,返回一個 裝有數據的字典

總結:

上面直接 介紹很少的 form 的功能,只是讓大家瞭解一下 django form,具體的要去官方API介紹還可以,英文也比較好理解,就我對 django表單而言, 我認爲它是方便好用的,但是儘量大家不要過分的依賴django所提供的功能,儘管他提供了 強大的功能,很多事情還是要一步一步來,過分的依賴 它提供的功能,會造成你整個的系統變得非常不靈活。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章