用go语言做一个简单的登录,大家不妨来看一下

现在的网站可以说登录注册几乎就是首要的,所以今天就给大家来一个简约版的登录吧
先来给大家看一下效果吧
这里写图片描述
有些过分简洁,大家别见怪啊
接下来是成功的效果
这里写图片描述
我只是提供一个思路和方法至于美化,大家随意
接下来是失败的效果
这里写图片描述
接下来就是代码了
前端代码

<html>
<head><title>用户登录</title></head>
<body>
    <form action="http://localhost:8080/test" method="post">
        用户名:<input type="text" name="name">
        密  码:<input type="text" name="pasw">
        <input type="submit" value="登录">
    </form>
</body>
</html>

后端代码

package main

import (
        "fmt"
        "io/ioutil"
        "net/http"
        "database/sql"
       _"github.com/Go-SQL-Driver/MySQL"
        "reflect"
)
func main() {
        http.HandleFunc("/test", hand)
        http.HandleFunc("/register",register)
        err := http.ListenAndServe(":8080", nil)
        if err != nil {
                fmt.Println("err")
        }
}
func hand(w http.ResponseWriter, r *http.Request) {
        db,err := sql.Open("mysql","root:root@tcp(localhost:3306)/yttzcom?charset=utf8")
         nam := r.FormValue("name")
         pas := r.FormValue("pasw")
        query, err := db.Query("select * from tmpdb.tmptab where name = '"+nam+"' and  psw = '"+pas+"'") 
        checkErr(err)
        v := reflect.ValueOf(query)
        fmt.Println(v)
        //number := printResult(query)
        dates :=printResult(query)
         w.Write([]byte(dates))
        defer r.Body.Close()
}
func register(w http.ResponseWriter, r *http.Request){
        fmt.Println("register")
        w.Write([]byte("there is register!"))

        defer r.Body.Close()
        body, err := ioutil.ReadAll(r.Body)
        if err != nil {
            fmt.Println("read err")
        }
        fmt.Println(string(body))
}
func checkErr(errMasg error) {  
        if errMasg != nil {  
                panic(errMasg)  
        }  
}
func printResult(query *sql.Rows) string  { 
        column, _ := query.Columns()              //读出查询出的列字段名  
        values := make([][]byte, len(column))     //values是每个列的值,这里获取到byte里  
        scans := make([]interface{}, len(column)) //因为每次查询出来的列是不定长的,用len(column)定住当次查询的长度  
        for i := range values {                   //让每一行数据都填充到[][]byte里面  
                scans[i] = &values[i]  
        }  
        results := make(map[int]map[string]string) //最后得到的map  
        i := 0  
        for query.Next() { //循环,让游标往下移动  
                if err := query.Scan(scans...); err != nil { //query.Scan查询出来的不定长值放到scans[i] = &values[i],也就是每行都放在values里  
                        fmt.Println(err)  
                        return  "3"
                }  
                row := make(map[string]string) //每行数据  
                for k, v := range values {     //每行数据是放在values里面,现在把它挪到row里  
                        key := column[k]  
                        row[key] = string(v)  
                }  
                results[i] = row //装入结果集中  
                i++  
        }       
        for k, v := range results { //查询出来的数组
                 fmt.Println(k)
                 fmt.Println(v)
                 record :="<b>登陆成功</b>\nid:"+results[k]["id"]+"\n"+"用户名:"+results[k]["name"]+"\n"+"密码:"+results[k]["psw"]                
                 return record               
        }
        return "<b>用户名或密码错误</b>"        
}

是不是有人就会问,如果登录成功了怎么跳转页面呢是不?其实很简单到时只需要在登陆成功的时候加个模板,可是模板要怎么用呢,怎样修改模板里面的内容呢,下面就给大家一个简单的同样是登录的效果,到时只需将登陆成功的模板,修改成你自己的登录成功的页面即可,接下来是效果
这里写图片描述
这里写图片描述
前端代码

<html>
<head><title>用户登录</title></head>
<body>
    <form action="http://localhost:8080/test" method="post">
        用户名:<input type="text" name="name">
        密  码:<input type="text" name="pasw">
        <input type="submit" value="登录">
    </form>
    <p><b> {{.Stutas}}</b></P>
</body>
</html>

后端代码

package main

import (
        "fmt"
        "io/ioutil"
        "net/http"
        "html/template"
        "database/sql"
       _"github.com/Go-SQL-Driver/MySQL"
        "reflect"
)
type stu struct{
    Stutas string
}
func main() {
        http.HandleFunc("/test", hand)
        http.HandleFunc("/register",register)
        http.HandleFunc("/",login)
        err := http.ListenAndServe(":8080", nil)
        if err != nil {
                fmt.Println("err")
        }
}
func login(w http.ResponseWriter, r *http.Request){
       t, _ := template.ParseFiles("loginss.html")
       t.Execute(w,"")
}
func hand(w http.ResponseWriter, r *http.Request) {
        db,err := sql.Open("mysql","root:root@tcp(localhost:3306)/yttzcom?charset=utf8")
         nam := r.FormValue("name")
         pas := r.FormValue("pasw")
        query, err := db.Query("select * from tmpdb.tmptab where name = '"+nam+"' and  psw = '"+pas+"'") 
        checkErr(err)
        v := reflect.ValueOf(query)
        fmt.Println(v)
        dates :=printResult(query)
        data  :=stu{dates}
        t, _ := template.ParseFiles("loginss.html")
        t.Execute(w,data)
        defer r.Body.Close()
}
func register(w http.ResponseWriter, r *http.Request){
        fmt.Println("register")
        w.Write([]byte("there is register!"))

        defer r.Body.Close()
        body, err := ioutil.ReadAll(r.Body)
        if err != nil {
            fmt.Println("read err")
        }
        fmt.Println(string(body))
}
func checkErr(errMasg error) {  
        if errMasg != nil {  
                panic(errMasg)  
        }  
}
func printResult(query *sql.Rows) string  { 
        column, _ := query.Columns()              //读出查询出的列字段名  
        values := make([][]byte, len(column))     //values是每个列的值,这里获取到byte里  
        scans := make([]interface{}, len(column)) //因为每次查询出来的列是不定长的,用len(column)定住当次查询的长度  
        for i := range values {                   //让每一行数据都填充到[][]byte里面  
                scans[i] = &values[i]  
        }  
        results := make(map[int]map[string]string) //最后得到的map  
        i := 0  
        for query.Next() { //循环,让游标往下移动  
                if err := query.Scan(scans...); err != nil { //query.Scan查询出来的不定长值放到scans[i] = &values[i],也就是每行都放在values里  
                        fmt.Println(err)  
                        return  "3"
                }  
                row := make(map[string]string) //每行数据  
                for k, v := range values {     //每行数据是放在values里面,现在把它挪到row里  
                        key := column[k]  
                        row[key] = string(v)  
                }  
                results[i] = row //装入结果集中  
                i++  
        }       
        for k, v := range results { //查询出来的数组
                 fmt.Println(k)
                 fmt.Println(v)
                 record :="登陆成功"+"\n"+"id:"+results[k]["id"]+"\n"+"用户名:"+results[k]["name"]+"\n"+"密码:"+results[k]["psw"]                 
                 return record               
        }
        return "用户名或密码错误"       
}

如果有不懂的地方,可以在下方评论和留言

猜你喜欢

转载自blog.csdn.net/qq_35730500/article/details/54602154