为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Golang 中将 html 数据移动到结构体

如何在 Golang 中将 html 数据移动到结构体

Go
慕莱坞森 2021-10-18 17:03:52
我是 Golang 的新手,我正在尝试将数据从操作字段移动到结构。我的主要功能是:func main () {    http.HandleFunc("/public/", func (w http.ResponseWriter, r *http.Request) {        http.ServeFile(w, r, r.URL.Path[1:]) })    http.HandleFunc("/public/new_user/", signup)     http.ListenAndServe(":8080", nil)}// struct for recieving Signup data input from signup.htmltype Signup struct {    name  string    email string}// func to receive data into struc above FROM signup.htmlfunc signup(w http.ResponseWriter, r *http.Request) {    var S Signup     S.name = r.FormValue("name")    S.email = r.FormValue("email")    //this is just to test the output    fmt.Println("%v\n", S.name)    fmt.Println("%v\n", S.email)}我有http.HandleFunc("public/new_user/", signup)哪个应该呈现signup函数。但是,当我路由到public/new_user而不是从 func 注册接收结构时,我收到了一个空白的 html 页面。上面的S.name = r.FormValue("name")和S.email = r.FormValue("email")行是从注册页面获取他们的信息,即:<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Sign Up</title></head><body><h1>Sign Up</h1><br/><form action="/public/new_user" method="post" id="form1"><label>Name:</label><input type="string" name="name" /></br></br><label>Email:</label><input type="string" name="email" /></form></br><button type="submit" form="form1" value="Submit">Submit</button></body><!-- Latest compiled and minified CSS --><link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"><!-- jQuery library --><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script><!-- Latest compiled JavaScript --><script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script></html>如您所见,此页面public/new_user在提交时路由到。任何人都可以告诉我为什么public/new_user看到我的情况是空白的public/new_user:http.HandleFunc("/public/new_user/", signup) 哪个应该呈现注册功能?谢谢
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

第一个问题是您为模式注册了处理程序,"/public/new_user/"但将表单发布到/public/new_user.


您必须更改 HTML<form>才能使用此 URL:


<form action="/public/new_user/" method="post" id="form1">

这样做的重要性在于,即使访问 URL/public/new_user有效,因为发生了自动重定向(301 Moved permanently响应),但是当您的浏览器向新 URL(以斜杠结尾)发出第二次请求时,提交的表单不会被“携带”。


执行此操作后,您仍然会收到一个空白页面,因为您的signup()函数不会写入任何响应(尽管您现在将在控制台上看到提交和打印的表单数据)。


如果你想看到回复,要么写点什么,要么重定向到另一个页面。


另请注意,fmt.Println()它没有格式字符串参数,它只打印您传递给它的所有内容。使用fmt.Printf(),如果你想使用的格式字符串。您也可以使用%+v格式字符串打印带有字段名称的完整结构。


例如:


func signup(w http.ResponseWriter, r *http.Request) {

    var S Signup

    S.name = r.FormValue("name")

    S.email = r.FormValue("email")


    fmt.Printf("%+v\n", S)


    fmt.Fprintf(w, "Form received, you used name: %s", S.name)

}


查看完整回答
反对 回复 2021-10-18
?
萧十郎

TA贡献1815条经验 获得超13个赞

我认为您正在跳过表单验证。您必须检查客户端输入,并且应该放置令牌参数以防止 Xsrf 攻击。

您可以使用此包来验证用户的输入。


查看完整回答
反对 回复 2021-10-18
  • 2 回答
  • 0 关注
  • 256 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信