jQuery代碼以下:html
function SendCode(this){ var email = $(#xiang).val(); $.ajax({ url:'/send_code', type:'POST', data:{em:email}, success:function(arg){ console.log(arg); }, error:function(){ } }) }
class SendCodeHandler(BaseRequestHandler): def post(self,*args,**kwargs): #定製信息 ret = {"status":True,"data":"","error":""} email = self.get_argument('em',None) if email: #若是有值,生成隨機驗證碼,併發送郵箱 code = commons.randon_code() message.email([email,],code) #建立session鏈接 conn = chouti_orm.session() #生成臨時表對象,並寫入到臨時表 obj = chouti_orm.SendCode(email=email,code=code,stime=datetime.datetime.now()) conn.add(obj) conn.commit() self.write(json.dumps(ret)) else: #若是沒有,就改變False狀態,加上錯誤信息 ret["status"] = False ret["error"] = "郵箱格式錯誤" self.write(json.dumps(ret))
在上面這個過程當中,因爲用到臨時存儲的臨時表,因此咱們要在chouti_orm.py定義一個SendCode類作爲臨時表
前端
class SendCode(Base): __tablename__ = "sendcode" #註冊時驗證碼信息 nid = Column(Integer, primary_key=True, autoincrement=True) email = Column(String(32),index=True) code = Column(String(6)) # status = Column(Integer) #狀態碼,0表示未註冊,1成功,2拉黑 #驗證碼的有效時間 stime = Column(TIMESTAMP) #發送時間
function SubmitRegister(ths){ $(ths).children(':eq(0)').addClass('hide'); $(ths).addClass('not-allow').children(':eq(1)').removeClass('hide'); // 發送Ajax請求 //獲取用戶輸入的全部內容(定義一個特定的class或自定義屬性) var post_dict = {} $(".regiter_temp").each(function(){ var input_val = $(this).val(); var name_val = $(this).attr("name"); post_dict[name_val]=input_val; }) console.log(post_dict); //發送ajax請求 $.ajax({ url:"/register", type:"POST", data:post_dict, success:function(arg){ console.log(arg); //arg是字符串 var obj = JSON.parse(arg); if(obj.status){ //註冊成功---跳轉(已登陸狀態--session實現) location.href = "/index"; }else{ alert(obj.error); } } }) //完成以後 $(ths).removeClass('not-allow').children(':eq(1)').addClass('hide'); $(ths).children(':eq(0)').removeClass('hide'); }
class RegisterHandler(BaseRequestHandler): def post(self, *args, **kwargs): ret = {"status":True,"data":"","error":""} #獲取用戶輸入的全部內容 #code = sendcode 匹配 郵箱 #註冊 #conn.add(obj) #conn.commit() conn = chouti_orm.session() #創立鏈接 #根據用戶提交過來的驗證碼和郵箱 到 臨時表裏去篩選 r = conn.query(chouti_orm.SendCode).filter(code=123,email='111').first() if not r: #若是沒有,返回錯誤信息 ret['status'] = False ret["error"] = "郵箱驗證碼錯誤" self.write(json.dumps(ret)) else: #臨時表裏有,就註冊成功,實例用戶信息對象,跟新到userinfo表裏 obj = chouti_orm.UserInfo() conn.add(obj) conn.commit() #session保存用戶登錄狀態 self.session["is_login"] = True #保存用戶 self.session['username'] = '用戶輸入的用戶名' self.write(json.dumps(ret))
大家可能有疑問,好像註冊時沒對郵箱是否已經註冊進行驗證,對吧,這裏能夠在填郵箱的標籤訂義onblur事件--發送ajax請求,到後臺去userinfo表進行檢測而且返回結果就能夠了python