Go語言學習教程 管理員登入功能開發

2021-09-16 18:38:18 字數 2891 閱讀 7319

學習完了資料庫操作的知識以後。本節內容,我們將實現管理員登陸功能,涉及到多個模組的**實現和邏輯處理,以及資料庫表的操作,都將在本節內容中進行實現。

管理員結構體定義

首先我們要定義管理員這個實體的結構體,我們定義為admin:

type admin struct
在admin結構體定義中,我們通過tag中的xorm限定來制定各個結構體字段的型別,使用json來限定在進行json資料序列化時定義的json欄位。

管理員控制器定義

我們使用mvc包模式來進行功能開發,在進行了結構體定義以後,我們接著定義控制器。控制器負責來完成我們請求的邏輯流程控制,是我們功能開發的核心樞紐。在本專案中,我們按照模組化的結構進行功能開發,本節內容中的管理員登陸就屬於管理員模組。admincontroller定義如下:

type admincontroller struct
在admincontroller定義中,包含iris.context上下文處理物件,用於資料功能處理的管理員模組功能實現adminservice,還有用於session管理的物件。

定義postlogin方法來處理使用者登陸請求,具體的路由處理解析規則我們前面已經學習過,登陸處理方法定義如下:

//介面:/admin/login

//請求:post

func (ac *admincontroller) postlogin(context iris.context) mvc.result

這裡只給出控制器的請求處理的方法定義,具體邏輯,我們後面會詳細講。

管理員資料提供模組定義

在我們實際的開發過程中,我們往往將資料提供服務模組設計成介面,這樣設計的目的是介面定義和具體的功能程式設計實現了分離,有助於我們在不同的實現方案之間進行切換,成本非常小,如下圖:

func newadminservice(db *xorm.engine) adminservice 

}

當我們需要切換不同的實現時,比如由mysql切換到sqlite,我們只需要修改上述具體的adminservice實現就好了,其他都不需要更改,**改動非常小。

具體到本專案中,我們使用的是mysql資料庫,因此我們還需要利用運算元據庫來實現adminservice介面中定義的功能方法,在本專案中的管理員的該模組中,實現類我們定義為adminsevice,定義如下:

/**

* 管理員的服務實現結構體

*/type adminsevice struct

通過使用者名稱和密碼查詢特定的管理員的方法實現:

func (ac *adminsevice) getbyadminnameandpassword(username, password string) (model.admin, bool)
控制器繫結,路由處理

管理員結構體,控制器和功能邏輯實現了以後,我們需要在程式入口處做控制器繫結,指定我們定義的管理員控制器進行路由處理,具體的繫結操作如下:

//啟用session

sessmanager := sessions.new(sessions.config)

engine := datasource.newmysqlengine()

//管理員模組功能

adminservice := service.newadminservice(engine)

admin.register(

adminservice,

sessmanager.start,

) admin.handle(new(controller.admincontroller))

在上述**中,我們啟用了session,然後通過mvc的handle方法進行控制器的指定。

登入功能方法解析,資料庫查詢

在繫結好了控制器處理以後,我們就可以來實現具體的控制器登陸方法中的業務邏輯,具體的登陸邏輯主要如下:

根據上述的邏輯進行編碼實現,完整的登陸方法邏輯實現如下:

func (ac *admincontroller) postlogin(context iris.context) mvc.result ,

} }//根據使用者名稱、密碼到資料庫中查詢對應的管理資訊

admin, exist := ac.service.getbyadminnameandpassword(adminlogin.username, adminlogin.password)

//管理員不存在

if !exist ,

} }//管理員存在 設定session

userbyte, _ := json.marshal(admin)

ac.session.set(admin, userbyte)

return mvc.response,

}}

需要注意的是,該請求處理方法中,除了包含業務邏輯處理以外,我們還使用了session實現了使用者狀態的儲存。

瀏覽器post請求

所有的**程式設計部分,我們已經實現。可以通過啟動專案,進行登陸請求除錯。在瀏覽器中輸入使用者名稱和密碼,即可使用開發者工具檢視,我們這裡瀏覽器傳送的post的登陸請求,攜帶的使用者資料是json格式,如下:

在真實的生產環境中,密碼和使用者敏感的資料是要經過加密或者脫敏處理的,這裡我們是案例講解,直接進行傳遞,這一點需要大家注意到與實際生產環境的區別。

登陸資料返回

在controller的postlogin方法中已經有返回資料。登陸請求的返回資料是json格式,如果登陸成功,會有如下返回格式:

本節內容,我們開發完成了管理員登陸功能的開發,下節課將繼續進行管理員模組的其他功能的開發。

go語言學習教程 管理員登入功能開發

學習完了資料庫操作的知識以後。本節內容,我們將實現管理員登陸功能,涉及到多個模組的 實現和邏輯處理,以及資料庫表的操作,都將在本節內容中進行實現。首先我們要定義管理員這個實體的結構體,我們定義為admin type admin struct在admin結構體定義中,我們通過tag中的xorm限定來制...

go語言學習教程 管理員登入功能開發

學習完了資料庫操作的知識以後。本節內容,我們將實現管理員登陸功能,涉及到多個模組的 實現和邏輯處理,以及資料庫表的操作,都將在本節內容中進行實現。首先我們要定義管理員這個實體的結構體,我們定義為admin type admin struct在admin結構體定義中,我們通過tag中的xorm限定來制...

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

前面第10節課內容中已經學習開發完成了管理員登陸功能。本節課我們將繼續學習開發完成管理員資訊查詢功能 管理員退出功能 請求及路由對映 路由控制器繫結服務端使用之前已經學習過的mvc包繫結控制器自動解析路由請求。設定解析mvc管理員控制器 如下所示 admincontroller負責處理管理員模組的請...