如何在Golang中将html数据移动到struct

时间:2015-07-07 05:15:06

标签: html struct go

我是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.html
type Signup struct {
    name  string
    email string
}

// func to receive data into struc above FROM signup.html
func 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注册接收结构时,我收到一个BLANK 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 {/ 1}}的原因是空白的。

http.HandleFunc("/public/new_user/", signup) 

哪个应该呈现注册功能?感谢

2 个答案:

答案 0 :(得分:1)

第一个问题是您为模式<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/imageView2" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toRightOf="@id/imageView2" android:layout_alignBottom="@+id/imageView2" android:text="New Text" /> </RelativeLayout> 注册了处理程序,但是您将表单帖子指向"/public/new_user/"

您必须更改HTML /public/new_user才能使用此网址:

<form>

这一点的重要性在于,即使访问网址<form action="/public/new_user/" method="post" id="form1"> 是有效的,因为会发生自动重定向(/public/new_user响应),但是当您的浏览器生成时,提交的表单不会被“传输”对新URL的第二个请求(以斜杠结尾)。

执行此操作后,您仍然会收到一个空白页面,因为您的301 Moved permanently功能没有写任何回复(尽管您现在可以在控制台上看到提交和打印的表单数据)。

如果您想查看回复,请写一些内容或重定向到另一个页面。

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

例如:

%+v

答案 1 :(得分:0)

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

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

Form validator