208-beego使用者註冊校驗
阿新 • • 發佈:2019-01-06
beego使用者註冊校驗 頁面說明 1.index 2.list 3.detail 4.cart 5.place_order 6.login 7.register 8.user_center_info 9.user_center_order 10.user_center_site 先來看一下js 在該註冊頁面中,包含了使用者註冊時需要填寫的資訊, 例如:使用者名稱,密碼,密碼確認,郵箱資訊。 在這裡,大家需要注意的是, 為了保證使用者填寫資訊的準確性, 在這裡需要對使用者填寫的資訊進行校驗。 關於表單的校驗, 這裡需要在<head>標籤中引入jquery檔案: <script type="text/javascript" src="/static/js/jquery-1.12.4.min.js"></script> 關於具體校驗的實現,已經封裝在了一個js檔案中了, 該檔案為:register.js 所以也需要將該檔案在<head>標籤中引入一下: <script type="text/javascript" src="/static/js/register.js"></script> 下面,我們來看一下,register.js檔案的具體實現如下: $(function(){ //定義變數,預設值為false。 var error_name = false;//如果使用者名稱出現了錯誤,將該變數的值修改為true. var error_password = false;//如果密碼出現了錯誤,將該變數的值修改為true. var error_check_password = false;//如果密碼確認出現了錯誤,該變數的值修改為true. var error_email = false;//如果郵箱出現了錯誤,該變數的值修改為true. var error_check = false;//如果選擇同意協議,該變數的值修改為true. //根據id的值,找到“user_name”,並且繫結一個blur事件,也就是當該文字框失去焦點後,執行其對應的方法。 $('#user_name').blur(function() { check_user_name(); }); //同上 $('#pwd').blur(function() { check_pwd(); }); //同上 $('#cpwd').blur(function() { check_cpwd(); }); //同上 $('#email').blur(function() { check_email(); }); //根據id找到“allow”,並且繫結一個單擊事件,並且判斷該元素是否被選中, //如果選中了,將變數 error_check變數的值修改為false,並且將其同胞元素<span>隱藏、 //如果沒有選中,將變數error_check變數的值修改為true,並且在其同胞元素<span>上列印“請勾選同意” //並且將該<span>標籤顯示出來。 $('#allow').click(function() { if($(this).is(':checked')) { error_check = false; $(this).siblings('span').hide(); } else { error_check = true; $(this).siblings('span').html('請勾選同意'); $(this).siblings('span').show(); } }); //獲取使用者名稱的長度,並且進行判斷其長度,如果不符合條件,顯示出對應的錯誤提示。 function check_user_name(){ var len = $('#user_name').val().length; if(len<5||len>20) { $('#user_name').next().html('請輸入5-20個字元的使用者名稱') $('#user_name').next().show(); error_name = true; } else { $('#user_name').next().hide(); error_name = false; } } //獲取密碼的長度,並且進行長度的判斷,如果不符合條件,顯示出對應的錯誤提示 function check_pwd(){ var len = $('#pwd').val().length; if(len<8||len>20) { $('#pwd').next().html('密碼最少8位,最長20位') $('#pwd').next().show(); error_password = true; } else { $('#pwd').next().hide(); error_password = false; } } //密碼確認判斷,獲取密碼框中輸入的內容,同時獲取“確認密碼框”中輸入的內容,進行比較。 //如果兩個值相等,表示兩次輸入的密碼一致,否則給出錯誤提示。 function check_cpwd(){ var pass = $('#pwd').val(); var cpass = $('#cpwd').val(); if(pass!=cpass) { $('#cpwd').next().html('兩次輸入的密碼不一致') $('#cpwd').next().show(); error_check_password = true; } else { $('#cpwd').next().hide(); error_check_password = false; } } //對郵箱格式進行校驗,判斷其輸入的郵箱是否符合對應的格式,如果不符合,給出對應的錯誤提示。 //這裡對郵箱格式的校驗,使用了正則表示式。 function check_email(){ var re = /^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$/; if(re.test($('#email').val())) { $('#email').next().hide(); error_email = false; } else { $('#email').next().html('你輸入的郵箱格式不正確') $('#email').next().show(); error_check_password = true; } } //當用戶單擊“註冊”按鈕時,在將資料傳送服務端之前,會先呼叫submit方法, //在該方法中,會將上面所有校驗的方法進行呼叫,然後判斷其對應的變數的值 //如果所有變數的值為false,表示校驗全部通過,那麼會將表單中的資料傳送到服務端,否則是不會發送到服務端的。 //注意:reg_from為form標籤的id屬性的值,當單擊“註冊”這個submit按鈕時,會先執行submit方法。 //只有該方法最終返回的結果為true,才會將資料傳送到服務端。 $('#reg_form').submit(function() { //呼叫上面校驗的方法。 check_user_name(); check_pwd(); check_cpwd(); check_email(); //判斷其變數的值,如果全部為false,表示校驗全部通過,這時submit方法最終會返回true, //這時,才會將表單中的資料傳送到服務端。如果submit方法最終返回的是false,就不會向服務端提交發送資料。 if(error_name == false && error_password == false && error_check_password == false && error_email == false && error_check == false) { return true; } else { return false; } }); }) 接下來設計表 type User struct{ Id int Username string `orm:"unique;size(100)"` Password string `orm:"size(100)"` Email string Power int `orm:"default(0)"` Active int `orm:"default(0)"` Receivers []*Receiver `orm:"reverse(many)"` } type Receiver struct{ Id int Name string Postcode string Address string Phone string IsDefault bool `orm:"default(false)"` User *User `orm:rel(fk)` } 然後來初始化一下models init(){ orm.RegisterDataBase("default","mysql","root:
[email protected](127.0.0.1:3306)/fresh?charset=utf8") orm.RegisterModel(new(User),new(Receiver)) orm.RunSyncdb("default",false,true) } 然後我們寫控制器 type UserController struct{ beego.Controller } func (this *UserController) ShowRegister(){ this.TplName="register.html" } func (this *UserController) HandleRegister(){ username := this.GetString("user_name") pwd := this.GetString("pwd") cpwd := this.GetString("cpwd") email := this.GetString("email") if user=="" || pwd=="" || cpwd=="" || email==""{ this.Data["err"]="輸入資料不完整" this.TplName="register.html" return } reg,err := regexp.Compile(...) if err!=nil { this.Data["err"]="正則建立失敗" this.TplName="register.html" return } res := reg.MatchString(email) if res==false{ this.Data["err"]="郵箱格式不正確" this.TplName="register.html" return } if pwd!=cpwd{ this.Data["err"]="兩次密碼不一致" this.TplName="register.html" return } //開始處理資料 o := orm.NewOrm() var user models.User user.Username =username user.Password=pwd user.Email=email //插入 _,err := o.Insert(&user) if err!=nil{ this.Data["err"]="使用者名稱重複" this.TplName="register.html" return } this.Redirect("/login",302) } 然後增加路由 func init(){ beego.Router("/",&controllers.MainController{}) beego.Router("/register",&controllers.UserController{}) beego.Router("/login",&controllers.UserController{}) } 這邊要增加校驗的過程 //對接收到的資料進行非空校驗 if userName == "" || pwd == "" || cpwd == "" || email == ""{ this.Data["errmsg"] = "輸入資訊不完整,請重新輸入!" this.TplName = "register.html" return } //判斷“密碼”和”確認密碼“是否一致。 if pwd != cpwd{ this.Data["errmsg"] = "兩次輸入密碼不一致,請重新輸入!" this.TplName = "register.html" return } //對郵箱格式的校驗:注意這裡使用的是regexp下的Compile方法。 reg,_ := regexp.Compile("^[A-Za-z0-9\u4e00-\u9fa5][email protected][a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$") res := reg.FindString(email) if res == ""{ this.Data["errmsg"] = "郵箱格式不正確" this.TplName = "register.html" return } 然後我們接收到資料 應該賦值給user物件 o := orm.NewOrm() user := models.User{} user.Name = userName user.PassWord = pwd user.Email = email 然後我們要校驗一下使用者名稱是否重名 err = o.Read(&user,"Name") if err != orm.ErrNoRows{ this.Data["errmsg"] = "使用者已經存在,請重新註冊!" this.TplName = "register.html" return } 校驗完成之後 如果沒有重名的情況 那麼就把使用者的資訊儲存到資料庫裡面 _,err = o.Insert(&user) if err != nil { this.Data["errmsg"] = "插入失敗,請重新註冊!" this.TplName = "register.html" return }