go語言實戰教程之管理員查詢功能、退出功能

qfDavie發表於2019-04-10

了管理員登陸功能。本節課我們將繼續學習開發完成管理員資訊查詢功能、管理員退出功能

管理員資訊查詢功能

請求及路由對映
  • 管理員資訊查詢介面

    • 介面名稱:獲取管理員資訊

    • 使用場景:管理員登陸系統時,通過該介面查詢獲取管理員資訊。伺服器接收到請求後,首先從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);複製程式碼


相關文章