1. 程式人生 > >208-beego使用者註冊校驗

208-beego使用者註冊校驗





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 }