了管理員登陸功能。本節課我們將繼續學習開發完成管理員資訊查詢功能、管理員退出功能
管理員資訊查詢功能
請求及路由對映
管理員資訊查詢介面
介面名稱:獲取管理員資訊。
使用場景:管理員登陸系統時,通過該介面查詢獲取管理員資訊。伺服器接收到請求後,首先從Session中獲取使用者資訊,如果能夠獲取到管理員資訊,則將資料組合後進行返回;如果Session獲取不到管理員資訊,則跳轉到管理員登陸頁面。
請求Url:介面文件之前已經介紹過,使用小么雞平臺來生成介面文件,小么雞介面文件地址:www.xiaoyaoji.cn/doc/ywBfq1v…。管理員資訊查詢介面:/admin/info。
Request請求型別: GET請求型別。
資料型別:X-WWW-FORM-URLENCODED。
響應型別:JSON格式。
路由控制器繫結 服務端使用之前已經學習過的mvc包繫結控制器自動解析路由請求。設定解析mvc管理員控制器程式碼如下所示:
adminService := service.NewAdminService(engine) admin := mvc.New(app.Party("/admin")) admin.Register( adminService, sessManager.Start, ) admin.Handle(new(controller.AdminController))複製程式碼
AdminController負責處理管理員模組的請求業務邏輯處理,具體的請求路由的自動對映關係在之前的課程中我們已經介紹過:
使用app.Party("/admin")路由組來解析管理員模組的請求
請求url為info,請求型別為Get。因此,在AdminController中宣告GetInfo方法來處理獲取管理員資訊的請求。
請求處理返回值型別為mvc.Result,該型別是專門用於處理請求的返回值型別。在使用過程中,還可以使用mvc.Response以及mvc.View。
Controller業務邏輯處理
在GetInfo方法中處理/admin/info的業務邏輯主要步驟如下:
Session中獲取管理員資訊
userByte := ac.Session.Get(ADMIN)複製程式碼
如果獲取不到管理員資訊,組裝資料進行返回,返回資料包含一下欄位:
``` mvc.Response{ Object: map[string]interface{}{ "status": utils.RECODE_UNLOGIN,//未登陸 "type": utils.EEROR_UNLOGIN,//未登陸型別 "message": utils.Recode2Text(utils.EEROR_UNLOGIN),//提示語未登陸 } ```複製程式碼
如果能夠獲取到管理員資訊資料,將管理員資料資訊進行組裝並返回,返回資料包含以下欄位:
mvc.Response{ Object: map[string]interface{}{ "status": utils.RECODE_OK, "data": admin.AdminToRespDesc(), }, }複製程式碼
其中返回的data欄位中包含的即是管理員的相關資訊。此處,我們通過AdminToRespDesc方法將管理員結構體資料轉化成所需要的鍵值資訊,該方法定義如下:
func (this *Admin) AdminToRespDesc() interface{} { respDesc := map[string]interface{}{ "user_name": this.AdminName, "id": this.AdminId, "create_time": this.CreateTime, "status": this.Status, "avatar": this.Avatar, "city": this.CityName, "admin": "管理員", } return respDesc }複製程式碼
adminService查詢管理員記錄資訊
GetByAdminNameAndPassword查詢使用者資訊 在開發使用者登陸功能時,我們呼叫過該方法,該方法是使用我們的資料庫操作引擎來查詢管理員使用者資訊,並來返回內容並且將查詢後的使用者資訊儲存到了session當中:
ac.engine.Where(" user_name = ? and pwd = ? ", username, password).Get(&admin)複製程式碼
條件查詢使用兩個語法:
where:新增查詢限制條件
get:將查詢結果賦值給結構體變數
SQL語句 我們使用資料庫引擎操作查詢管理員資訊,其實最終執行的SQL語句如下:
select * from admin where user_name = '' and pwd = ''複製程式碼
管理員退出功能
請求及路由對映
管理員退出介面:
介面詳細內容可以參考小么雞介面文件:www.xiaoyaoji.cn/doc/yyRPCzC…
路由控制器繫結
管理員退出功能依然是Get請求,介面url為singout,因此我們在AdminController中定義如下方法用於處理使用者退出功能請求:
func (ac *AdminController) GetSingout() mvc.Result { //刪除session,下次需要從新登入 ac.Session.Delete(ADMIN); return mvc.Response{ Object: map[string]interface{}{ "status": utils.RECODE_OK, "success": utils.Recode2Text(utils.RESPMSG_SIGNOUT), }, } }複製程式碼
刪除Session 使用者退出系統,即是清除掉當前登陸狀態。在本實戰專案中,我們直接通過清除Session中的管理員資訊即可實現對登陸狀態的清除。
ac.Session.Delete(ADMIN);複製程式碼