连接数据库
var db *sql.DB
var err error
db, err = sql.Open("mysql", "root:102077@tcp(127.0.0.1:3306)/accounting?parseTime=true")
if err != nil {
fmt.Println("数据库连接失败,err:",err.Error())
return
}
err = db.Ping()
if err != nil {
fmt.Println("数据库连接失败,err:",err.Error())
return
}
db.Close()
连接数据库案例
func SelectUserByUserName(username string ) model.User {
//声明一个结构体
var user model.User
//连接数据库
db := util.GetCont()
//sql语句
contains := "select id,name,password from t_user where name = ?"
//进行预处理
stmt, err := db.Prepare(contains)
if err != nil {
log.Fatalln(err.Error())
}
//QueryRow()读取一行内容
//Query()读取多行内容
row := stmt.QueryRow(username)
if err != nil {
log.Fatalln(err.Error())
}
//将读取到的内容赋给结构体
err = row.Scan(&user.Id, &user.Name, &user.Password)
//处理错误
switch {
case err == sql.ErrNoRows:
case err != nil:
if _, file, line, ok := runtime.Caller(0); ok {
fmt.Println(err, file, line)
}
}
return user
}
与前端页面连接
浏览器导航条为GET请求
通过HTML提交为POST请求
解析模板
t, err := template.ParseFiles("./index")
返回给{{.}}一个值
t.Execute(w,"")
解析表单
err := r.ParseForm()
获取表单中的值
userid := r.Form["userid"]
登录案例
func Login(w http.ResponseWriter, r *http.Request) {
//浏览器首页输入发出GET请求
if r.Method == "GET" {
//解析login.tmpl中的内容
t1, err := template.ParseFiles("./web/login.html")
if err != nil {
log.Fatalln(err.Error())
}
//{{.}}不需要赋值,也不需要显示出来
err = t1.Execute(w, "")
if err != nil {
log.Fatalln(err.Error())
}
return
} else { //页面提交登录发出post请求
//解析login.tmpl中的内容
t1, err := template.ParseFiles("./web/login.html")
if err != nil {
log.Fatalln(err.Error())
}
//解析form表单
err = r.ParseForm()
if err != nil {
log.Fatalln(err.Error())
}
//获取form表单中的内容,获取的值为string类型
//用户名
name := r.Form["name"][0]
if err != nil {
log.Fatalln(err.Error())
}
//用户密码
password := r.Form["password"][0]
if err != nil {
log.Println(err.Error())
}
//根据输入的用户名查询到的用户结构体
user := service.SelectUserByUserName(name)
//用户不存在
if user.IsStructureEmpty() {
//给{{.}}赋值,说明用户不存在,重新登录
err = t1.Execute(w, "该用户不存在!")
if err != nil {
log.Println(err.Error())
}
} else {
//判断密码是否正确
if user.Password == password {
//判断是否为管理员登录
if user.Id == 0 {
//管理员登录成功进入后台页面,解析index.html
t, err := template.ParseFiles("./web/index.html")
if err != nil {
fmt.Println(err.Error())
}
t.Execute(w,nil)
} else {
//登录成功进入首页,解析首页表单
//http.Redirect(w,r,"./web/firstpage.html",http.StatusTemporaryRedirect)
t, err := template.ParseFiles("./web/firstpage.html")
if err != nil {
fmt.Println(err.Error())
}
//{{.}}不需要赋值,也不需要显示出来
err = t.Execute(w, "")
if err != nil {
log.Println(err.Error())
}
}
} else {
//给{{.}}赋值,说明登录失败,重新登录
err = t1.Execute(w, "登录失败,请重新登录!")
if err != nil {
log.Println(err.Error())
}
}
}
}
}