goweb-bookstore

来源:https://www.cnblogs.com/ygjzs/archive/2020/01/15/12198356.html
-Advertisement-
Play Games

goweb 書城項目 項目地址在文末 設置處理靜態資源,如 css 和 js 文件 這裡統一處理了靜態資源,改變原前端頁面中相對路徑,變為以項目根目錄開始 view 開始,使客戶端可以訪問到服務端的資源 直接去 html 頁面 同上,處理了頁面的路徑跳轉 去首頁 主頁面的路由 userhander. ...


goweb-書城項目

項目地址在文末

設置處理靜態資源,如 css 和 js 文件

http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("views/static"))))

這裡統一處理了靜態資源,改變原前端頁面中相對路徑,變為以項目根目錄開始 view 開始,使客戶端可以訪問到服務端的資源

直接去 html 頁面

http.Handle("/pages/", http.StripPrefix("/pages/", http.FileServer(http.Dir("views/pages"))))

同上,處理了頁面的路徑跳轉

去首頁

http.HandleFunc("/main", controller.GetPageBooksByPrice)

主頁面的路由

userhander.go

去登錄

http.HandleFunc("/login", controller.Login)
實現了登錄功能,獲取前端頁面的輸入,對輸入的用戶名和密碼進行查詢,資料庫中是否存在,並是否正確,然後返回結果,成功返回登陸成功的界面,失敗提示用戶名或密碼錯誤,模板渲染用戶的名字,登錄成功後創建 session,並將信息通過 cookie 存儲到 session,cookie 再發送給瀏覽器

去註銷

http.HandleFunc("/logout", controller.Logout)
獲取客戶端的 cookie,查詢 session 並從資料庫中刪除 session,讓 cookie 失效,返回給瀏覽器 cookie,並回到首頁

去註冊

http.HandleFunc("/regist", controller.Regist)
獲取用戶輸入,在資料庫中查詢用戶名是否存在,並給與提示,註冊成功的話返回註冊成功的頁面,然後就可以進行登陸了

通過 Ajax 請求驗證用戶名是否可用

http.HandleFunc("/checkUserName", controller.CheckUserName)
這個函數實現 ajax 提示用戶名已存在,與上面的結合使用,前端請求該函數,這樣輸入了重覆的用戶名,不會導致之前填寫的都消失,也就是頁面不會刷新,提高用戶體驗

bookhandler.go

獲取帶分頁的圖書信息

http.HandleFunc("/getPageBooks", controller.GetPageBooks)
該處理器獲取頁碼,調用分頁的函數,用邏輯實現,上一頁和下一頁何時消失,解析到模板,到圖書館管理界面,分頁函數查詢資料庫獲取總頁數,並將所有圖書寫入結構體返回,渲染的時候,書那一塊渲染書的結構體,頁數那一塊還要調用頁數的處理函數進行頁數的跳轉,在函數中渲染,這些函數(判斷是否有首頁,是否有尾頁,上一頁,下一頁)和定義頁數結構體處於同一個文件,並且輸入頁數前端獲取指定的頁數值,還是調用了處理器,只不過,處理器會判斷有沒有頁數,有的話到指定頁數,沒有預設就是第一頁即首頁

渲染的頁面有刪除功能和修改功能和增加功能,每個 herf 會回到處理器函數繼續處理,刪除功能調用查詢資料庫並刪除,然後執行獲取分頁圖書的處理器函數,增加功能和修改功能都會轉到同一個頁面,用動作來判斷渲染哪一部分,修改會通過書的 id(隱藏的 input 獲取 id)來連接前後端,轉到修改頁面,渲染適當的內容,修改過後提交,提交執行UpdateOrAddBook函數,獲取數據,向資料庫修改數據,實現對數據進行刷新,增加與修改類似,函數末尾跟刪除一樣執行獲取頁碼的處理器函數,實現更新過的數據顯示

刪除圖書

http.HandleFunc("/deleteBook", controller.DeleteBook)

在上面已經介紹過了

去更新圖書的頁面

http.HandleFunc("/toUpdateBookPage", controller.ToUpdateBookPage)
在上面已經介紹過了

更新或添加圖書

http.HandleFunc("/updateOraddBook", controller.UpdateOrAddBook)
在上面已經介紹過了

獲取帶分頁和價格範圍的圖書

http.HandleFunc("/getPageBooksByPrice", controller.GetPageBooksByPrice)

該處理器實現了在首頁根據輸入價格的最大和最小查詢符合條件的圖書,因為是給用戶看的,所以需要驗證是否處於登錄狀態,通過資料庫查詢 session 來驗證用戶是否登錄,查詢符合條件的圖書後,判斷 session,並更新渲染的信息,是否渲染請登錄,信息為怕個結構體,在此處復用一下上面寫的頁數代碼就 OK 了

carthandler.go

添加圖書到購物車中

http.HandleFunc("/addBook2Cart", controller.AddBook2Cart)

此處理器先判斷用戶是否登錄,沒登錄 ajax 提示登錄,沒登錄登錄的話,登錄的話,根據圖書獲取圖書信息,通過 session 獲取用戶 id,判斷該用戶有沒有購物車,沒有購物車,創建購物車,並將選中的圖書加入新創建的購物項,購物項保存到切片中,完成這一步操作後,提示用戶將圖書加入了購物項,如果購物車已存在,去資料庫中先找到該用戶的購物車,添價商品先判斷購物車的購物項中是否有改購物項,沒有則創建購物項,加入到切片上,有則在原來的購物項的 count 上+1,並更新資料庫中購物項數據,購物車和購物項在資料庫中與用戶相關聯,購物車中有購物項的結構體,session 的 id 有用戶登錄時與用戶的 id 相關聯,這有一個容易犯的小錯誤,在獲取購物項時。一定要獲取圖書,不然會導致購物項中圖書加入到資料庫中看不到想要的結果,另外,購物車結構體所在的文件有計算總數量和總價錢的方法,購物項結構體所在文件有計算金額小計的方法

獲取購物車信息

http.HandleFunc("/getCartInfo", controller.GetCartInfo)

這個處理器跳轉到購物車信息頁面,首先根據 session 的 id 獲取對應的購物車,沒有則顯示購物車空空如也,有購物車則顯示有購物車,渲染到界面上,購物車存在 session 結構體上,所以可以直接傳 session。在其前端界面用 ajax 顯示了金額和數量。

清空購物車

http.HandleFunc("/deleteCart", controller.DeleteCart)
調用函數刪除購物車,因為購物車與購物項關聯,所以刪除購物車所有購物項後,才能刪除購物該購物車,前端界面實現輓留:是否要刪除

刪除購物項

http.HandleFunc("/deleteCartItem", controller.DeleteCartItem)
獲取圖書信息,在對應資料庫中刪除購物項

更新購物項

http.HandleFunc("/updateCartItem", controller.UpdateCartItem)
該處理器實現更新更改購物項後的數據,在前端事件監聽那監聽到購物項發生變化就會調用該處理器,從而用 ajax 實現局部更新

去結賬

http.HandleFunc("/checkout", controller.Checkout)

該處理器在頁面實現跳轉,獲取購物車,生成訂單時間,並創建訂單,保存到資料庫,遍曆數據項,保存到訂單中,一氣合成,在首頁處更新書的數量:售出多少,還剩多少,清空該購物車,設置單號到 session,解析模板,頁面顯示單號,結賬完畢

orderhandler.go

獲取所有訂單

http.HandleFunc("/getOrders", controller.GetOrders)
獲取所有訂單,在頁面所有訂單信息,會顯示發貨,收穫等,管理端和客戶端不一樣,為不同的單號設置不同的狀態,獲取狀態為訂單結構體的方法

獲取訂單詳情,即訂單所對應的所有的訂單項

http.HandleFunc("/getOrderInfo", controller.GetOrderInfo)

訂單頁面點擊訂單詳情,會跳轉到訂單詳情頁面,顯示該訂單中的所有圖書購買狀況,

獲取我的訂單

http.HandleFunc("/getMyOrder", controller.GetMyOrders)

針對客戶端,用戶登錄,根據 session 的 id 獲得對應的訂單並渲染模板

發貨

http.HandleFunc("/sendOrder", controller.SendOrder)

點擊調用函數改變訂單的狀態,管理端使用

確認收貨

http.HandleFunc("/takeOrder", controller.TakeOrder)

點擊調用函數改變訂單的狀態,客戶端使用

最後

前端的 herf 實現不同的處理器的功能的實現,很靈活,一個處理器可以多處去鏈接,多個鏈接可以使用一個處理器,入口處靜態資源處理一下,這就是入口函數要乾的事,控制出全部寫處理器,處理器要用到的函數全寫到 dao 的文件夾里去,數據的定義寫到 model 中區,utils 寫了資料庫連接和生成隨機數值(訂單號,session 的 id),view 裡面寫靜態頁面和靜態資源,其實標準的應該是 static 里寫靜態資源,view 寫頁面,這是一個純後端項目所以這每份這麼細,

最後列一下處理器清單
從 main 入口可以知道所有的功能:


    //設置處理靜態資源,如css和js文件
    http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("views/static"))))
    //直接去html頁面
    http.Handle("/pages/", http.StripPrefix("/pages/", http.FileServer(http.Dir("views/pages"))))
    //去首頁
    http.HandleFunc("/main", controller.GetPageBooksByPrice)
    //去登錄
    http.HandleFunc("/login", controller.Login)
    //去註銷
    http.HandleFunc("/logout", controller.Logout)
    //去註冊
    http.HandleFunc("/regist", controller.Regist)
    //通過Ajax請求驗證用戶名是否可用
    http.HandleFunc("/checkUserName", controller.CheckUserName)
    //獲取所有圖書
    // http.HandleFunc("/getBooks", controller.GetBooks)
    //獲取帶分頁的圖書信息
    http.HandleFunc("/getPageBooks", controller.GetPageBooks)
    http.HandleFunc("/getPageBooksByPrice", controller.GetPageBooksByPrice)
    //添加圖書
    // http.HandleFunc("/addBook", controller.AddBook)
    //刪除圖書
    http.HandleFunc("/deleteBook", controller.DeleteBook)
    //去更新圖書的頁面
    http.HandleFunc("/toUpdateBookPage", controller.ToUpdateBookPage)
    //更新或添加圖書
    http.HandleFunc("/updateOraddBook", controller.UpdateOrAddBook)
    //添加圖書到購物車中
    http.HandleFunc("/addBook2Cart", controller.AddBook2Cart)
    //獲取購物車信息
    http.HandleFunc("/getCartInfo", controller.GetCartInfo)
    //清空購物車
    http.HandleFunc("/deleteCart", controller.DeleteCart)
    //刪除購物項
    http.HandleFunc("/deleteCartItem", controller.DeleteCartItem)
    //更新購物項
    http.HandleFunc("/updateCartItem", controller.UpdateCartItem)
    //去結賬
    http.HandleFunc("/checkout", controller.Checkout)
    //獲取所有訂單
    http.HandleFunc("/getOrders", controller.GetOrders)
    //獲取訂單詳情,即訂單所對應的所有的訂單項
    http.HandleFunc("/getOrderInfo", controller.GetOrderInfo)
    //獲取我的訂單
    http.HandleFunc("/getMyOrder", controller.GetMyOrders)
    //發貨
    http.HandleFunc("/sendOrder", controller.SendOrder)
    //確認收貨
    http.HandleFunc("/takeOrder", controller.TakeOrder)

    http.ListenAndServe(":8080", nil)

項目地址

項目地址


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • java學習經驗總結 單鏈表的建立與結點的增刪 在該鏈表結點有data數據,並且還有cpu,分給cpu隨機的時間片,根據時間片大小進行結點data的排序 鏈表結點的建立 鏈表的構建過程以及添加節點、刪除節點 ...
  • 一、什麼是GPIO GPIO全稱為General Purpose Input Output,中文理解為通用輸入輸出埠。它指的是編程可控制的引腳,即可以控制引腳是作為輸入來用,還是輸出功能,又或者是交給片上外設使用(復用)。 二、GPIO結構框圖 理解GPIO硬體電路的實現,有助於編程的理解。下圖是 ...
  • 字的存儲 在上一篇中說到一個16位寄存器可以存放一個字(16位)或者一個位元組(8位),當存放一個位元組的時候只需要一個記憶體單元(記憶體單元是以位元組為單位的,8位),而存放一個字需要兩個記憶體單元,這樣存放一個字就需要兩個連續的記憶體單元,這個16位的字, 高位存放在高地址,低位存放在低地址 。 |記憶體地址| ...
  • CodeForces - 209C Trails and Glades 傳送門 題目大意:n個點,m條邊。從一號點出發,需要遍歷所有有邊相連的所有點最後要到一號點。(1 ≤ n ≤ 106; 0 ≤ m ≤ 106) 解法:跑出連通塊個數和每個連通塊所包含的度數為奇數的點,對於包含2個以上奇度頂點的 ...
  • 本文是對我原創工具 "m3u8視頻下載合併器" 關鍵代碼解析及軟體實現的思路的講解,想要工具的請跳轉鏈接 1.思路說明 思路挺簡單,具體步驟如下: 1. 下載m3u8文件 2. 解析m3u8文件獲得ts文件列表 3. 根據文件列表批量下載ts文件 4. 進行ts的解密操作(如果沒有加密則跳過此步驟) ...
  • 今天給大家演示的是一款由jsp+servlet+mysql實現的火車票預定管理系統,該系統主要實現的功能有:前臺功能:用戶查詢車票信息、登錄註冊、購票、查看已購車票、修改密碼等功能,後臺管理功能:管理員管理、用戶管理、火車信息管理、站點信息管理、線路信息管理、車票信息管理、購票信息管理等。基本實現了 ...
  • Prometheus+Alertmanager+Grafana監控組件容器化部署 ...
  • 用mybaties列印語句很好配置,後來用了JdbcTemplate就不知道怎麼列印了,其實JdbcTemplate執行sql語句的過程會做列印sql語句的操作,只不過我們的日誌級別沒有設置為debug,將自己的日誌級別設置為debug就可以了,看源碼就可以知道 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...