beego基础--数据提交

beego基础知识--数据提交

本节掌握的知识点
1.如何创建自定义的Controller
2.get()方法的两种传参方式
3.post()方法上传数据
    -form表单上传
    -ajax上传
4.post()方法上传文件
    -form表单上传文件
    -ajax上传文件

1.创建自定义的Controller

新建 controlloer/c_user.go
    package controllers

    import (
        "github.com/astaxie/beego"
    )


    type UserController struct {
        beego.Controller
    }
    //下面可以定义get(),post()方法
    func (u *UserController) Get() {
    }

    func (u *UserController) Post() {
    }
在 router/router.go 中添加路由,指定访问的controller
package routers

import (
	"blog/controllers"
	"github.com/astaxie/beego"
)

func init() {
	beego.Router("/", &controllers.MainController{})
	//指定路由
	beego.Router("/", &controllers.UserController{})
}

2.get()方法的两种传参方式

继续上面"1."中的代码中添加路由的方式
router/router.go

    // 1.路由格式:地址/?:key:类型
    //   访问方式:地址/value
    //beego.Router("/user/first/?:first", &controllers.UserController{})
    beego.Router("/user/first/?:first:int", &controllers.UserController{})

    // 2.路由格式:地址/
    //   访问方式:地址/?second=value
    beego.Router("/user/second/", &controllers.UserController{})
新建 views/v_user.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>beego基础-数据提交</title>>
</head>
<body> 
    Get()方法传参方式<br>
    一.{{.first}}<br>
    二.{{.second}}<br>
    <br>-------------------------<br>
 
</body>
</html>    
在controllers中读取地址栏传过来的值
controlloer/c_user.go

package controllers

import (
	"fmt"

	"github.com/astaxie/beego"
)

type UserController struct {
	beego.Controller
}

func (u *UserController) Get() {

   
	u.TplName = "v_user.html" //设置映射的模板文件

	//GetString()的参数要和地址中传参的key值一样
	first := u.GetString(":first")
	u.Data["first"] = first
	fmt.Println(first)

	second := u.GetString("second")
	// 只有GetString()没有 err 的返回值,其他类型都是有 string 转过去的
	// second, err := u.GetInt("second")
	// if err != nil {
	// 	u.Ctx.WriteString("只能传int类型")
	// }

	u.Data["second"] = second

	fmt.Println(second)
}

3.post()方法上传数据

继续上面"2."中的代码
router/router.go

package routers

import (
	"blog/controllers"

	"github.com/astaxie/beego"
)

func init() {
	beego.Router("/", &controllers.MainController{})

	// 1.路由格式:地址/?:key:类型
	//   访问方式:地址/value
	//beego.Router("/user/first/?:first", &controllers.UserController{})
	beego.Router("/user/first/?:first:int", &controllers.UserController{})

	// 2.路由格式:地址/
	//   访问方式:地址/?second=value
	beego.Router("/user/second/", &controllers.UserController{})

	// 3.post
	//form 提交
	//@notes:路由的地址是可以继续用second的
	beego.Router("/user/third/", &controllers.UserController{})

}
添加post方法  

controlloer/c_user.go

package controllers

import (
	"fmt"

	"github.com/astaxie/beego"
)

type Person struct {
	ID       int
	Account  string `form:"account"` //指定用来保存模板中的 post 提交的name对象
	Password string `form:"password"`
}

type UserController struct {
	beego.Controller
}

func (u *UserController) Get() {

	u.TplName = "v_user.html" //设置映射的模板文件

	//GetString()的参数要和地址中传参的key值一样

	first := u.GetString(":first")
	u.Data["first"] = first
	fmt.Println(first)

	second := u.GetString("second")
	// 只有GetString()没有 err 的返回值,其他类型都是有 string 转过去的
	// second, err := u.GetInt("second")
	// if err != nil {
	// 	u.Ctx.WriteString("只能传int类型")
	// }

	u.Data["second"] = second

	fmt.Println(second)

	/*
		//获取ajax 提交的数据
		account := u.GetString("account")
		password := u.GetString("password")
		fmt.Println(account)
		fmt.Println(password)

		//u.Ctx.WriteString("提交成功")
		u.Data["json"] = map[string]interface{}{"code":200,"msg":"success"}
		u.ServeJSON()
	*/
}

func (u *UserController) Post() {

    /*
	 account := u.GetString("account")
	 password := u.GetString("password")

	//需要设置post后的界面
	 u.Ctx.WriteString("account:" + account + " -- " + "password:" + password)
    */
    
	/*
		//解析到结构体,需要给结构中的成员指定form标签
		person := Person{}
		u.ParseForm(&person)

		u.ParseForm(&person)
		u.Ctx.WriteString("account:" + person.Account + " -- " + "person.Password:" + person.Password)
	*/

}

views/v_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>beego基础-数据提交</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js">
    </script>
</head>
<body> 
    Get()方法传参方式<br>
    一.{{.first}}<br>
    二.{{.second}}<br>
    <br>-------------------------<br>

    <!-- post表单提交<br>

     <form action="/user/third/" method="post">
       账号: <input type="text" name="account"><br>
       密码: <input type="password" name="password"><br>
            <input type ="submit" value="提交"><br>
    
    </form> -->

    
	<!-- Ajax表单提交<br>
    <form >
        账号: <input type="text" id="account"><br>
        密码: <input type="password" id="password"><br>
    <input type ="button" value="提交" id="ajax_post"><br>
    
    </form> 
    <script>
          var ajax_post = document.getElementById("ajax_post");
          ajax_post.onclick = function(ev){
            var account = document.getElementById("account").value;
            var password = document.getElementById("password").value;
            //alert(account);
            //alert(password);
            //alert("ajax_post")
            $.ajax({
                url:"/user/third/",
                type:"post",
                data:{
                    "account":account,
                    "password":password
                },
                success:function(data){
                    // alert(data) //获取 u.Ctx.WriteString 中的字符串
                    if(data["code"] == 200)
                        alert(data["msg"]) //获取u.ServeJSON() 
                    else    
                        alert("添加失败")
                }
                //fail:function(data){         
                //} 
                //看了下api 是没有fail 对象的
            })
          }
    </script>



</body>
</html>  

4.post()方法上传文件
上传文件就在新的 Controller,Html中实现,直接包含了form表单提交 和 ajax方式提交

新建controller/c_upload.go
package controllers

import (
	"fmt"

	"github.com/astaxie/beego"
)

type UploadController struct {
	beego.Controller
}

func (upload *UploadController) Get() {

	upload.TplName = "v_upload.html"

}

func (upload *UploadController) Post() {

	/*
		//提交文件是post方法
		//enctype="multipart/form-data

		File, FileHeader, _ := upload.GetFile("uploadFile")

		defer File.Close()
		fmt.Println(FileHeader.Filename)

		//文件夹要存在
		err := upload.SaveToFile("uploadFile", "res/"+FileHeader.Filename)
		if err != nil {
			fmt.Println(err.Error())
		}
		//upload.Ctx.WriteString("上传成功")
	*/
	//ajax 上传文件
	File, FileHeader, _ := upload.GetFile("Ajax_uploadFile")

	defer File.Close()
	fmt.Println(FileHeader.Filename)

	//文件夹要存在
	err := upload.SaveToFile("Ajax_uploadFile", "res/"+FileHeader.Filename)
	if err != nil {
		fmt.Println(err.Error())
	}

	upload.Data["json"] = map[string]interface{}{"code": 200, "msg": "success"}
	upload.ServeJSON()

}

新建view/v_upload.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>beego基础-数据提交</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js">
    </script>
</head>
<body> 
    
    <!-- 要设置enctype="multipart/form-data"
         才能提交文件 -->
    <form action="/user/upload/" method="post" enctype="multipart/form-data">
        提交文件 <input type="file" name="uploadFile"><br>
                <input type="submit" value="上传文件"><br>
    </form>

    <br>
    <br>

    ajax提交文件
    <form>
        <input type = "file" id = "Ajax_uploadFile"><br>
        <input type ="button" value="上传文件" id = Ajax_button><br>
    </form>

    <script>
        var Ajax_uploadFile=document.getElementById("Ajax_button");
        Ajax_uploadFile.onclick = function(ex){
            var formdata = new FormData();
            //后端获取文件的名字 Ajax_uploadFile
            formdata.append("Ajax_uploadFile",$("#Ajax_uploadFile")[0].files[0])

            $.ajax({
                url:"/user/upload",
                type:"post",
                data:formdata,
                processData:false, //避免 jquery ajax 序列化 data
                contentType:false,//不使用默认的 application/x-www-form-urlencoded
                success:function(data){
                        if (data["code"] == 200)
                        {
                            alert (data["msg"])
                        }
                }
               //fail:function(data){
               //}
               //看了下api 是没有fail 对象的
            })
        }
    </script>
</body>
</html>     
routers/router.go设置路由 
package routers

import (
	"blog/controllers"

	"github.com/astaxie/beego"
)

func init() {
	beego.Router("/", &controllers.MainController{})

	// 1.路由格式:地址/?:key:类型
	//   访问方式:地址/value
	//beego.Router("/user/first/?:first", &controllers.UserController{})
	beego.Router("/user/first/?:first:int", &controllers.UserController{})

	// 2.路由格式:地址/
	//   访问方式:地址/?second=value
	beego.Router("/user/second/", &controllers.UserController{})

	// 3.post
	//form 提交
	//ajax 提交
	//@notes:路由的地址是可以继续用second的
	beego.Router("/user/third/", &controllers.UserController{})

	//4.上传文件
	beego.Router("/user/upload/", &controllers.UploadController{})

}

posted @   blackTree  阅读(420)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示