Day 16 Go | 青训营笔记

51 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第16天

因为我们的抖声使用了Gin+gorm,所以复习一下Gin的知识点

请求方式

HTTP请求及Handle

引入post请求

使用e.LoadHTMLGlob("./templates/*") 创建html页面,路径可以是设置成绝对路径或者相对路径,但是不能直接设置src为根目录,就可以开启访问此html页面

绑定表单

html中的表单记得是<form></form>而不是<from>

 <form action="/register" method="post">
        <input name="username"><br/>
        <input name="password"><br/>
        <input type="checkbox" name="hobby" value="GoLang">GoLang
        <input type="checkbox" name="hobby" value="Java">Java
        <input type="checkbox" name="hobby" value="C++">C++
        <input type="submit">
</form>    
复制代码

使用bootstrap和静态资源

首先使用e := gin.Default()使用函数e.Static("/assets【页面访问link的根路径】", "assets【实际路径】")加载静态资源

自定义中间件的使用

主要使用e.use()参数为自定义函数

package main
import(
    "fmt"
    "github.com/gin-gonic/gin"
)
func MyHandler(e *gin.Context){
    fmt .Println("MyHandler 。 。。。")
}
func MyHandlerB() gin.HandlerFunc {
    return func(ctx *gin.Context){
        path := ctx.FullPath()
        method := ctx.Request.Method
        fmt.Println("MyHandlerB 。。。。",path,method)
    }
}
func main() {
    e := gin.Default()
    e.Use (MyHandler, MyHandlerB())
    e.Static("../assets","src/gin/02/assets")
    e.StaticFile("/favicon.ico""src/gin/02/assets/favicon.ico")
    e.GET("/index",index)
    e.LoadHTMIGlob("src/gin/02/templates/*")
    e.Run()
}
func index(c*gin.Context){
    C.HTML(200,"index.html", nil)
}
复制代码

BasicAuth中间件路由组权限管理

Basic Authentication是一种HTTP访问控制方式,用于限制对网站资源的访问。这种方式不需要Cookie和Session,只需要客户端发起请求的时候,在头部Header中提交用户名和密码就可以。如果没有附加,会弹出一个对话框,要求输入用户名和密码。这种方式实施起来非常简单,适合路由器之类小型系统。但是它不提供信息加密措施,通常都是以明文或者base64编码传输。

在网络嗅探中,Basic Authentication信息非常有价值,因为此类信息往往和路由器之类设备相关,并且不存在解密的困扰。

e := gin.Default()
	//3、分组管理
routGroup := e.Group("/admin", gin.BasicAuth(gin.Accounts{
		//理论上是需要去数据库去查的
    "shenz":     "123", //用户名:密码
    "mashibing": "123",
    "lianp":     "123",
    "glang":     "123",
}))
routGroup.GET("/secrept", MyHandlerA)

func MyHandlerA(c *gin.Context) {
    user := c.MustGet(gin.AuthUserKey).(string) //得到对应的key值(用户名)
    if secret, ok := adminUsers[user]; ok {     //根据key值去查找对应的数据,并返回
        c.JSON(http.StatusOK, gin.H{"user": user, "secret": secret})
    } else {
	c.JSON(http.StatusOK, gin.H{"user": user, "secret": "No"})
    }
}
复制代码

session和cookie

Cookie是服务器往客户端写的一些数据,可以实现自动登录等功能
context.Cookie()

引入MySQL

go get -u github.com/go-sql-driver/mysql

集成gorm

此中间件不必手写sql语句
Gorm集成手册
go get -u github.com/jinzhu/gorm