Django 中form的用法

orm的主要作用:1.在html中生成表單框架,2.驗證數據(實話實說,很簡潔,但不實用,靈活性差)

1.首先,建好一個工程
django-admin.py startproject myblog ,
再創建個model
python manage.py startapp User,
在model裏創建一些數據類型
class Users(models.Model):
    
    uname = models.CharField(max_length=30,unique=True,verbose_name="用戶名")
    upet = models.CharField(max_length=30,verbose_name="暱稱")
    upawd = models.CharField(max_length=30,verbose_name="密碼")
    email = models.EmailField(verbose_name="電子郵件")
    url = models.URLField(verbose_name="網址")
,到此,基本項目做好,開始使用form
2. 在model目錄下新建forms.py
  有兩種寫法:
  (1)定義表單模型
class UserForm(forms.Form):
        uname = forms.CharField(max_length=100 ,label='用戶名')
        email = forms.EmailField(label='電子郵件')
        upet = forms.CharField(
max_length=30,required=False,label='暱稱')  
       upawd = forms.CharField(label='密碼',widget=forms.Textarea)
        url = forms.
URLField(required=False ,label='網址')

(2)繼承model
from django.forms import ModelForm
from myblog.users.models import Users
class UsersForm(ModelForm):
        class Meta:
                model = Users
                fields = ('uname','upet', 'upawd','email','url')

3.在view視圖中 ,做表單驗證
def contact(request):
    if request.method == 'POST': 
        form = ContactForm(request.POST) 
        if form.is_valid(): 
              username=form.cleaned_data['uname']
              usernick=form.cleaned_data['upet']
              pawd1=form.cleaned_data['upawd']
              email=form.cleaned_data['email']
              weburl=form.cleaned_data['url']
             Users(uname=username,upet=usernick,upawd=pawd1,email=email,url=weburl).save()
              return HttpResponseRedirect('/index/') 
    else:
         return render_to_response('contact.html', {'form': form,})
4.在html頁面,代碼超簡單,這點django做的不錯
<form id="your-profile" action="/contact" method="post"> 
<table class="form-table">
    <!--{{ form.as_ul }}-->                            # 這是第一種寫法,在<ul> 顯示錶單
   <!-- {{ form.as_p }}-->                            # 這是第二種寫法,在<p> 顯示錶單
     <!--{{ form.as_table }}-->                     # 這是第三種寫法,在<table>顯示錶單
    {% for field in form %}                          # 這是第四種寫法,以循環形式顯示錶單
         {{ field.label_tag }}:{{ field }} 
         {{ field.errors }}
     {% endfor %}
</table> 
<p class="submit"><input type="submit" name="submit" id="submit" class="button-primary" value="註冊信息"  /></p> 
</form> 
5.在url.py中配置
(r'^contact',contact),



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

Java代碼  收藏代碼
  1. class ContactForm(forms.Form):  
  2.     subject = forms.CharField(max_length=100)  
  3.     message = forms.CharField(required=False)  


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

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

Java代碼  收藏代碼
  1. class BookForm(ModelForm):  
  2.     class Meta:  
  3.         model = Book  


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

Java代碼  收藏代碼
  1. class Meta:  
  2.         model = Author  
  3.         fields = ('name''title')  
  4. class Meta:  
  5.         model = Author  
  6.         exclude = ('birth_date',)  


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

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

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

Java代碼  收藏代碼
  1. model = Author  
  2.         fields = ('name''title''birth_date')  
  3.         widgets = {  
  4.             'name': Textarea(attrs={'cols'80'rows'20}),  
  5.         }  


通過widgets這個參數,手動的設定字段以何種input類型顯示 
更改報錯信息 
在django表單系統之中,如果在處理表中中 使用 is_valid()  
方法並且表單檢測發現表單內容不符合規則,那麼他將返回一個表單,表單之中沒一樣中 form.name.errors 就是報錯信息,雖然現在在服務器端檢驗表單字段的實用價值已經越來越小了,但是 俗話說, 永遠不要相信前臺腳本,永遠不要相信用戶,他們很可能利用你沒有後臺檢驗的功能而 搞出很多的事情來,所以儘管前臺已經做了檢驗,但是後臺仍然要做一次檢驗,更改默認的報錯信息是這樣的 

Java代碼  收藏代碼
  1. 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所提供的功能,儘管他提供了 強大的功能,很多事情還是要一步一步來,過分的依賴 它提供的功能,會造成你整個的系統變得非常不靈活。 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章