我需要go语言代码来编写两个静态Dashboard页面,并能够对mysql数据库中的contain表进行增删改查。第一个页面中能够输入user表的用户id,用户名,密码,然后跳转到第二个页面,展示用户id所对应的contain表中contain的id,contain是否在运行,最后一次更新的时间,所需要的镜像id,占用的cpu核数,占用内存大小及暴露的端口号的信息。
时间: 2024-03-27 21:40:26 浏览: 59
好的,以下是一个简单的示例代码,可以实现你的需求,请注意替换其中的数据库连接信息和表格结构:
```go
package main
import (
"database/sql"
"fmt"
"html/template"
"net/http"
_ "github.com/go-sql-driver/mysql"
)
// contain结构体,对应contain表的各个字段
type Contain struct {
ID int
Running bool
Updated string
Image string
CPU float32
Memory int
Port int
}
// 用户信息结构体,对应user表的各个字段
type User struct {
ID int
Username string
Password string
}
// 数据库连接信息
const (
dbHost = "localhost"
dbPort = "3306"
dbUser = "root"
dbPassword = "password"
dbName = "db_name"
)
// MySQL数据库连接
func getDb() (*sql.DB, error) {
db, err := sql.Open("mysql", dbUser+":"+dbPassword+"@tcp("+dbHost+":"+dbPort+")/"+dbName)
if err != nil {
return nil, err
}
return db, nil
}
// 用户注册,将用户信息插入到user表中
func registerHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
username := r.FormValue("username")
password := r.FormValue("password")
db, err := getDb()
if err != nil {
fmt.Println("Error:", err)
return
}
defer db.Close()
stmt, err := db.Prepare("INSERT INTO user (username, password) VALUES (?, ?)")
if err != nil {
fmt.Println("Error:", err)
return
}
res, err := stmt.Exec(username, password)
if err != nil {
fmt.Println("Error:", err)
return
}
_, err = res.LastInsertId()
if err != nil {
fmt.Println("Error:", err)
return
}
http.Redirect(w, r, "/dashboard?userid="+r.FormValue("id"), http.StatusSeeOther)
}
}
// 用户登录,查询user表中是否有该用户
func loginHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
username := r.FormValue("username")
password := r.FormValue("password")
db, err := getDb()
if err != nil {
fmt.Println("Error:", err)
return
}
defer db.Close()
var user User
err = db.QueryRow("SELECT * FROM user WHERE username=? AND password=?", username, password).Scan(&user.ID, &user.Username, &user.Password)
if err != nil {
fmt.Println("Error:", err)
return
}
http.Redirect(w, r, "/dashboard?userid="+fmt.Sprint(user.ID), http.StatusSeeOther)
}
}
// 获取用户id对应的contain表中的所有数据
func getContainData(db *sql.DB, userID int) ([]Contain, error) {
var result []Contain
rows, err := db.Query("SELECT * FROM contain WHERE id=?", userID)
if err != nil {
return nil, err
}
defer rows.Close()
for rows.Next() {
var contain Contain
err := rows.Scan(&contain.ID, &contain.Running, &contain.Updated, &contain.Image, &contain.CPU, &contain.Memory, &contain.Port)
if err != nil {
return nil, err
}
result = append(result, contain)
}
return result, nil
}
// 显示第二个页面,展示用户id所对应的contain表中的数据
func dashboardHandler(w http.ResponseWriter, r *http.Request) {
userID := r.FormValue("userid")
db, err := getDb()
if err != nil {
fmt.Println("Error:", err)
return
}
defer db.Close()
containData, err := getContainData(db, userID)
if err != nil {
fmt.Println("Error:", err)
return
}
t, err := template.ParseFiles("dashboard.html")
if err != nil {
fmt.Println("Error:", err)
return
}
t.Execute(w, containData)
}
// 启动Web应用程序
func main() {
http.HandleFunc("/register", registerHandler)
http.HandleFunc("/login", loginHandler)
http.HandleFunc("/dashboard", dashboardHandler)
http.ListenAndServe(":8080", nil)
}
```
以上代码仅供参考,具体实现需要根据你的需求进行调整和优化。同时也需要注意安全性问题,例如防止SQL注入攻击等。
阅读全文