亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2393 | 回復(fù): 1
打印 上一主題 下一主題

Django實(shí)戰(zhàn)(8):對(duì)比RoR與Django的輸入校驗(yàn)機(jī)制 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-02-20 20:50 |只看該作者 |倒序?yàn)g覽
Django實(shí)戰(zhàn)(8):對(duì)比RoR與Django的輸入校驗(yàn)機(jī)制










rails有一個(gè)”簡(jiǎn)潔、完美的驗(yàn)證機(jī)制,無(wú)比強(qiáng)大的表達(dá)式和驗(yàn)證框架“。在《Agile Web Development with Rails 4th》一書(shū)的7.1節(jié)向我們展示了如何驗(yàn)證Product:
  1. ?class Product < ActiveRecord::Base
  2.     validates :title, :description, :image_url, :presence => true
  3.     validates :price, :numericality => {:greater_than_or_equal_to => 0.01}
  4.     validates :title, :uniqueness => true
  5.     validates :image_url, :format => {
  6.         :with => %r{\.(gif|jpg|png)$}i,
  7.         :message => 'must be a URL for GIF, JPG or PNG image.'
  8.     }
  9. end
復(fù)制代碼
還是需要解釋一下:

validates :title, :description, :image_url, :presence => true :這三個(gè)字段不能為空。rails默認(rèn)是允許為空。而且由于model與migration是分開(kāi)定義的,你可以在migration中定義字段不能為空而model中可以為空,或者反之。
validates :price, :numericality => {:greater_than_or_equal_to => 0.01}:price字段應(yīng)該是有效的數(shù)字并且不小于0.01
validates :image_url, :format => {…}: image_url 必須以三種擴(kuò)展名結(jié)尾,這里沒(méi)有驗(yàn)證是否為有效的url

更加可怕的是,這個(gè)驗(yàn)證語(yǔ)法是rails3.0開(kāi)始支持的,而在此之前的版本要寫(xiě)成這樣:
  1. ?class Product < ActiveRecord::Base
  2.     validates_presence_of :title, :description, :image_url
  3.     validates_numericality_of :price
  4.     validates_format_of :image_url,:with => %r{^http:.+.(gif|jpg|png)$}i,
  5.     :message => "must be a URL for a GIF, JPG, or PNG image"
  6.     protected
  7.         def validate
  8.             errors.add(:price, "should be positive") unless price.nil? || price > 0.0
  9.         end
  10. end
復(fù)制代碼
再讓我們看看”簡(jiǎn)潔“的rails驗(yàn)證還有哪些功能(舊版語(yǔ)法):
validates_acceptance_of: 驗(yàn)證指定checkbox應(yīng)該選中。這個(gè)怎么看都應(yīng)該是form中的驗(yàn)證而與model無(wú)關(guān)
validates_associated:驗(yàn)證關(guān)聯(lián)關(guān)系
validates_confirmation_of:驗(yàn)證xxx與xxx_confirmation的值應(yīng)該相同。  這個(gè)怎么看也應(yīng)該是form中的驗(yàn)證而與model無(wú)關(guān)
validates_length_of:檢查長(zhǎng)度
validates_each     使用block檢驗(yàn)一個(gè)或一個(gè)以上參數(shù)
validates_exclusion_of 確定被檢對(duì)象不包括指定數(shù)據(jù)
validates_inclusion_of  確認(rèn)對(duì)象包括在指定范圍
validates_uniqueness_of檢驗(yàn)對(duì)象是否不重復(fù)
也許還有more and more, and more, and more…



回到Django。Django的驗(yàn)證有3層機(jī)制:
1. Field類(lèi)型驗(yàn)證。除了能夠?qū)?yīng)到數(shù)據(jù)庫(kù)字段類(lèi)型的Field類(lèi)型外,還有 EmailField,F(xiàn)ileField,F(xiàn)ilePathField,ImageField,IPAddressField,PhoneNumberField、 URLField、XMLField等,
2. Field選項(xiàng)驗(yàn)證。如,null=true,blank=true, choices,editable,unique,unique_for_date,unique_for_month,unique_for_year 等等。有些Field還有自己獨(dú)有的選項(xiàng),也可以用來(lái)約束數(shù)據(jù)。
3. 表單(Form)驗(yàn)證。還可以在Form中定義驗(yàn)證方法?梢远x整個(gè)Form的驗(yàn)證方法 clean,或者針對(duì)某個(gè)表單項(xiàng)的驗(yàn)證方法:clean_xxx。



前面建立的Product模型中,已經(jīng)默認(rèn)加入了不能為空、要求符合數(shù)字等驗(yàn)證,所以還需要進(jìn)行如下驗(yàn)證:
1.驗(yàn)證price>0:需要在Form中驗(yàn)證;
2. 驗(yàn)證title唯一:在Model中驗(yàn)證;
3. 驗(yàn)證image_url的擴(kuò)展名:在Form中驗(yàn)證,還可以順便在Model中將其改為URLField類(lèi)型。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2012-02-20 20:50 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP