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{})
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗