扣丁學堂區(qū)塊鏈培訓Go基礎Web應用開發(fā)輸入驗證
2018-08-23 09:35:43
1398瀏覽
隨著區(qū)塊鏈引發(fā)的“顛覆風暴”,大量區(qū)塊鏈培訓機構應運而生。但在魚龍混雜的培訓圈內(nèi),要想找到真正符合標準的課程體系與專屬區(qū)塊鏈領域的專業(yè)授課講師簡直是滄海一粟,千鋒扣丁學堂在線區(qū)塊鏈培訓做出行動改變并顛覆傳統(tǒng)培訓機構運營思維,并提醒大眾用戶,應理性選擇區(qū)塊鏈培訓機構。
Web開發(fā)中最重要的原則之一是您不能信任客戶端用戶表單中的任何內(nèi)容。
您必須在使用之前驗證所有傳入數(shù)據(jù)。
許多網(wǎng)站都受到這個問題的影響,這個問題既簡單又至關重要。
有兩種方法可以驗證常用的表單數(shù)據(jù)。
第一個是前端的JavaScript驗證,第二個是后端的服務器驗證。
本次只分享Web開發(fā)中的服務器端驗證。
必填字段
有時我們要求用戶輸入一些字段,但他們無法完成該字段??梢允褂胠en函數(shù)來獲取字段的長度,以確保用戶輸入了某些內(nèi)容。在ArticleSave方法中加入如下代碼
iflen(r.Form["author"][0])==0{
fmt.Println("authorisempty")
http.Redirect(w,r,"/view/"+title,http.StatusFound)
}
當提交的時候我們不給author賦值,然后點擊Submit提交,會看到輸出如下內(nèi)容
author:[]
authorisempty
r.Form在空白時對待不同的表單元素類型。
對于空文本框,文本區(qū)域和文件上傳,它返回一個空字符串;
對于單選按鈕和復選框,它甚至不會創(chuàng)建相應的項目。
相反,如果您嘗試訪問它,您將收到錯誤。
因此,使用r.Form.Get()獲取字段值更安全,因為如果該值不存在,它將始終返回空。
另一方面,r.Form.Get()一次只能獲得一個字段值,因此您需要使用r.Form來獲取值的映射。我們修改下剛才那段代碼如下
iflen(r.Form.Get("author"))==0{
fmt.Println("authorisempty")
http.Redirect(w,r,"/view/"+title,http.StatusFound)
}
當提交的時候我們不給author賦值,然后點擊Submit提交,會看到輸出如下內(nèi)容
author:[]
authorisempty
得到的結(jié)果跟上段代碼是一致的
數(shù)字
有時我們需要提交過來的數(shù)據(jù)是數(shù)字而不是字段值等其他文本。
例如,假設我們只需要整數(shù)形式的用戶年齡,即50或10,而不是“足夠老”或“年輕人”。
如果我們需要一個正數(shù),我們可以先將值轉(zhuǎn)換為int類型,然后再處理它。下面我們在ArticleSave方法中加入如下代碼
getint,err:=strconv.Atoi(r.Form.Get("author"))
iferr!=nil{
fmt.Println(err)
http.Redirect(w,r,"/view/"+title,http.StatusFound)
}
fmt.Println("getint:",getint)
當提交的時候我們給author賦值durban,然后點擊Submit提交,會看到輸出如下內(nèi)容
author:[durban]
strconv.Atoi:parsing"durban":invalidsyntax
當提交的時候我們給author賦值10,然后點擊Submit提交,會看到輸出如下內(nèi)容
author:[10]
getint:10
另一種方法是使用正則表達式。
代碼如下,我們將上面的代碼段更換如下
ifm,_:=regexp.MatchString("^[0-9]+$",r.Form.Get("author"));!m{
fmt.Println("非整數(shù)")
http.Redirect(w,r,"/view/"+title,http.StatusFound)
return
}
fmt.Println("getauthor:",r.Form.Get("author"))
當提交的時候我們給author賦值10,然后點擊Submit提交,會看到輸出如下內(nèi)容
author:[10]
getauthor:10
出于高性能目的,正則表達式效率不高,但簡單的正則表達式通常足夠快。
如果您熟悉正則表達式,那么這是驗證數(shù)據(jù)的一種非常方便的方法。
請注意,Go使用[RE2],因此支持所有UTF-8字符。RE2是一種快速,安全,線程友好的替代方法,用于回溯正則表達式引擎,如PCRE,Perl和Python中使用的那些。
【關注微信公眾號獲取更多學習資料】
查看更多關于“區(qū)塊鏈培訓技術資訊”的相關文章>>
標簽:
區(qū)塊鏈培訓
區(qū)塊鏈技術
區(qū)塊鏈開發(fā)
區(qū)塊鏈視頻教程
比特幣
以太坊