Beego 使用教程 5:页面视图

beego 是一个用于Go编程语言的开源、高性能的 web 框架

beego 被用于在Go语言中企业应用程序的快速开发,包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado, Sinatra 和 Flask

beego 官网:http://beego.gocn.vip/

上面的 beego 官网如果访问不到,看这篇文章《beego 官网文档本地环境搭建》

注意:本文的 beego 文档使用的就是本地环境搭建的文档,因为官网文档已经不可用了

beego 官方 github 仓库:https://github.com/beego/beego

上一讲,讲了 beego 过滤器部分内容,需要的朋友可以查看《Beego 使用教程 4:过滤器》

这一讲,讲解 页面视图

代码使用上一讲的代码

目录

1、返回页面

2、模板数据

2.1、返回字符串

2.2、返回结构体

2.3、返回 map

2.4、返回切片

3、模板函数

3.1、格式化时间函数

3.2、html 和字符串转换函数

3.3、自定义模板函数

3.4、其他模板函数

4、静态文件

5、Layout 设计


1、返回页面

在 controller 目录下新建 page.go,在 page.go 中添加下面代码

package controller

import (
	"github.com/beego/beego/v2/server/web"
)

type PageController struct {
	web.Controller
}

func (p *PageController) Index() {
	//返回页面
	p.TplName = "index.html"
}

Beego 默认情况下支持 tpl 和 html 后缀名的模板文件,如果你的后缀名不是这两种,请进行如下设置

web.AddTemplateExt("你文件的后缀名")

在项目根目录下新建 views 目录,Beego 中默认的模板目录是 views,可以通过配置 web.BConfig.WebConfig.ViewsPath = "pages" 修改默认的模版目录名称,笔者使用默认的模版目录

在 views 目录下新建 index.html,index.html 内容如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1>
</body>
</html>

修改 main.go 为下面代码

package main

import (
	"beego-demo/controller"
	"beego-demo/filter"
	"fmt"
	"github.com/beego/beego/v2/core/config"
	"github.com/beego/beego/v2/server/web"
)

func main() {
	//通过config获取自定义配置
	workername, _ := config.String("workername")
	fmt.Println(workername)

	//执行定时任务
	//go job.DemoTask()

	//注册自动路由
	//web.AutoPrefix("api", &controller.UserController{})
	web.CtrlGet("/name", (*controller.UserController).Name)
	web.CtrlGet("/get/:id", (*controller.UserController).GetUserById)
	web.CtrlGet("/get/:id/:num", (*controller.UserController).GetUserByIdAndNum)
	//返回页面
	web.CtrlGet("/page/index", (*controller.PageController).Index)

	//注册函数式路由
	controller.RegisterFunctionalRoutes()
	//web命名空间
	controller.RegisterNamespaceRoutes()

	//过滤器
	filter.RegisterFilters()

	//开启 Admin 管理后台
	web.BConfig.Listen.EnableAdmin = true
	web.BConfig.Listen.AdminAddr = "localhost"
	web.BConfig.Listen.AdminPort = 8088

	//查看已注册路由
	tree := web.PrintTree()
	methods := tree["Data"].(web.M)
	for k, v := range methods {
		fmt.Printf("%s => %v\n", k, v)
	}

	web.Run()
}

运行效果

浏览器请求:http://localhost:9090/page/index

修改 页面模版文件位置,在main.go 中添加下面代码

web.BConfig.WebConfig.ViewsPath = "pages"

在项目根目录下新建 pages 目录,在pages 目录下新建 index.tpl 文件

index.tpl 内容如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1>
</body>
</html>

修改 page.go 为下面代码

package controller

import (
	"github.com/beego/beego/v2/server/web"
)

type PageController struct {
	web.Controller
}

func (p *PageController) Index() {
	//返回页面
	//p.TplName = "index.html"
	p.TplName = "index.tpl"
}

main.go

package main

import (
	"beego-demo/controller"
	"beego-demo/filter"
	"fmt"
	"github.com/beego/beego/v2/core/config"
	"github.com/beego/beego/v2/server/web"
)

func main() {
	//通过config获取自定义配置
	workername, _ := config.String("workername")
	fmt.Println(workername)

	//执行定时任务
	//go job.DemoTask()

	//注册自动路由
	//web.AutoPrefix("api", &controller.UserController{})
	web.CtrlGet("/name", (*controller.UserController).Name)
	web.CtrlGet("/get/:id", (*controller.UserController).GetUserById)
	web.CtrlGet("/get/:id/:num", (*controller.UserController).GetUserByIdAndNum)
	//返回页面
	web.CtrlGet("/page/index", (*controller.PageController).Index)

	//注册函数式路由
	controller.RegisterFunctionalRoutes()
	//web命名空间
	controller.RegisterNamespaceRoutes()

	//过滤器
	filter.RegisterFilters()

	//开启 Admin 管理后台
	web.BConfig.Listen.EnableAdmin = true
	web.BConfig.Listen.AdminAddr = "localhost"
	web.BConfig.Listen.AdminPort = 8088

	web.BConfig.WebConfig.ViewsPath = "pages"

	//查看已注册路由
	tree := web.PrintTree()
	methods := tree["Data"].(web.M)
	for k, v := range methods {
		fmt.Printf("%s => %v\n", k, v)
	}

	web.Run()
}

运行效果

2、模板数据

下面的代码笔者使用 views 下的模板文件

2.1、返回字符串

修改 page.go 为下面内容

package controller

import (
	"github.com/beego/beego/v2/server/web"
)

type PageController struct {
	web.Controller
}

func (p *PageController) Index() {
	p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"
	//返回页面
	p.TplName = "index.html"
	//p.TplName = "index.tpl"
}

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1>
    <p>{{.content}}</p>
</body>
</html>

运行效果

2.2、返回结构体

修改  page.go 为下面内容

package controller

import (
	"github.com/beego/beego/v2/server/web"
)

type PageController struct {
	web.Controller
}

type Poetry struct {
	Name    string
	Author  string
	Content string
}

func (p *PageController) Index() {
	//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"

	poetry := Poetry{
		Name:    "茉莉花",
		Author:  "许景迂",
		Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",
	}
	p.Data["poetry"] = &poetry
	//返回页面
	p.TplName = "index.html"
	//p.TplName = "index.tpl"
}

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1>
    <p>{{.poetry.Name}}</p>
    <p>{{.poetry.Author}}</p>
    <p>{{.poetry.Content}}</p>
</body>
</html>

重启后运行效果

2.3、返回 map

修改  page.go 为下面内容

package controller

import (
	"github.com/beego/beego/v2/server/web"
)

type PageController struct {
	web.Controller
}

type Poetry struct {
	Name    string
	Author  string
	Content string
}

func (p *PageController) Index() {
	//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"

	//poetry := Poetry{
	//	Name:    "茉莉花",
	//	Author:  "许景迂",
	//	Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",
	//}
	//p.Data["poetry"] = &poetry

	mp := make(map[string]string)
	mp["name"] = "茉莉花"
	mp["author"] = "江奎"
	mp["content"] = "虽无艳态惊群目,幸有清香压九秋。应是仙娥宴归去,醉来掉下玉搔头"
	p.Data["mp"] = mp

	//返回页面
	p.TplName = "index.html"
	//p.TplName = "index.tpl"
}

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1>
    <p>{{.mp.name}}</p>
    <p>{{.mp.author}}</p>
    <p>{{.mp.content}}</p>
</body>
</html>

运行效果

2.4、返回切片

修改 page.go 为下面内容

package controller

import (
	"github.com/beego/beego/v2/server/web"
)

type PageController struct {
	web.Controller
}

type Poetry struct {
	Name    string
	Author  string
	Content string
}

func (p *PageController) Index() {
	//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"

	//poetry := Poetry{
	//	Name:    "茉莉花",
	//	Author:  "许景迂",
	//	Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",
	//}
	//p.Data["poetry"] = &poetry

	//mp := make(map[string]string)
	//mp["name"] = "茉莉花"
	//mp["author"] = "江奎"
	//mp["content"] = "虽无艳态惊群目,幸有清香压九秋。应是仙娥宴归去,醉来掉下玉搔头"
	//p.Data["mp"] = mp

	flowers := []string{"梅", "兰", "竹", "菊"}
	p.Data["flowers"] = flowers

	//返回页面
	p.TplName = "index.html"
	//p.TplName = "index.tpl"
}

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1>
    {{range $key, $val := .flowers}} {{$key}} {{$val}} {{end}}
</body>
</html>

运行效果

3、模板函数

3.1、格式化时间函数

在  page.go  中添加 F 函数

package controller

import (
	"github.com/beego/beego/v2/server/web"
	"time"
)

type PageController struct {
	web.Controller
}

type Poetry struct {
	Name    string
	Author  string
	Content string
}

func (p *PageController) Index() {
	//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"

	//poetry := Poetry{
	//	Name:    "茉莉花",
	//	Author:  "许景迂",
	//	Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",
	//}
	//p.Data["poetry"] = &poetry

	//mp := make(map[string]string)
	//mp["name"] = "茉莉花"
	//mp["author"] = "江奎"
	//mp["content"] = "虽无艳态惊群目,幸有清香压九秋。应是仙娥宴归去,醉来掉下玉搔头"
	//p.Data["mp"] = mp

	flowers := []string{"梅", "兰", "竹", "菊"}
	p.Data["flowers"] = flowers

	//返回页面
	p.TplName = "index.html"
	//p.TplName = "index.tpl"
}

func (p *PageController) F() {
	p.Data["date"] = time.Now()
	p.TplName = "f.html"
}

在 views 下新建 f.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>{{ dateformat .date "2006-01-02 15:04:05" }}</p>

    <p>{{date .date "Y-m-d H:i:s"}}</p>
</body>
</html>

修改 main.go 为下面内容

package main

import (
	"beego-demo/controller"
	"beego-demo/filter"
	"fmt"
	"github.com/beego/beego/v2/core/config"
	"github.com/beego/beego/v2/server/web"
)

func main() {
	//通过config获取自定义配置
	workername, _ := config.String("workername")
	fmt.Println(workername)

	//执行定时任务
	//go job.DemoTask()

	//注册自动路由
	//web.AutoPrefix("api", &controller.UserController{})
	web.CtrlGet("/name", (*controller.UserController).Name)
	web.CtrlGet("/get/:id", (*controller.UserController).GetUserById)
	web.CtrlGet("/get/:id/:num", (*controller.UserController).GetUserByIdAndNum)
	//返回页面
	web.CtrlGet("/page/index", (*controller.PageController).Index)
	web.CtrlGet("/page/f", (*controller.PageController).F)

	//注册函数式路由
	controller.RegisterFunctionalRoutes()
	//web命名空间
	controller.RegisterNamespaceRoutes()

	//过滤器
	filter.RegisterFilters()

	//开启 Admin 管理后台
	web.BConfig.Listen.EnableAdmin = true
	web.BConfig.Listen.AdminAddr = "localhost"
	web.BConfig.Listen.AdminPort = 8088

	//web.BConfig.WebConfig.ViewsPath = "pages"

	//查看已注册路由
	tree := web.PrintTree()
	methods := tree["Data"].(web.M)
	for k, v := range methods {
		fmt.Printf("%s => %v\n", k, v)
	}

	web.Run()
}

运行效果

3.2、html 和字符串转换函数

html2str 函数,实现了把 html 转化为字符串,剔除一些 script、css 之类的元素,返回纯文本信息

str2html 函数,实现了把相应的字符串当作 HTML 来输出,不转义

修改 page.go 为下面内容

package controller

import (
	"github.com/beego/beego/v2/server/web"
)

type PageController struct {
	web.Controller
}

type Poetry struct {
	Name    string
	Author  string
	Content string
}

func (p *PageController) Index() {
	//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"

	//poetry := Poetry{
	//	Name:    "茉莉花",
	//	Author:  "许景迂",
	//	Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",
	//}
	//p.Data["poetry"] = &poetry

	//mp := make(map[string]string)
	//mp["name"] = "茉莉花"
	//mp["author"] = "江奎"
	//mp["content"] = "虽无艳态惊群目,幸有清香压九秋。应是仙娥宴归去,醉来掉下玉搔头"
	//p.Data["mp"] = mp

	flowers := []string{"梅", "兰", "竹", "菊"}
	p.Data["flowers"] = flowers

	//返回页面
	p.TplName = "index.html"
	//p.TplName = "index.tpl"
}

func (p *PageController) F() {
	mp := make(map[string]string)
	mp["str"] = "<p style='color:red'>环佩青衣,盈盈素靥,临风无限清幽<p>"
	mp["html"] = "<p style='color:red'>出尘标格,和月最温柔。堪爱芳怀淡雅,纵离别,未肯衔愁<p>"
	p.Data["mp"] = mp

	p.TplName = "f.html"
}

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{.mp.str}}
    <br>
    {{html2str .mp.str}}

    <br>

    {{.mp.html}}
    <br>
    {{str2html .mp.html}}
</body>
</html>

运行效果

3.3、自定义模板函数

Beego 支持用户定义模板函数,但是必须在 web.Run() 调用之前

修改 main.go 为下面代码

package main

import (
	"beego-demo/controller"
	"beego-demo/filter"
	"fmt"
	"github.com/beego/beego/v2/core/config"
	"github.com/beego/beego/v2/server/web"
)

func main() {
	//通过config获取自定义配置
	workername, _ := config.String("workername")
	fmt.Println(workername)

	//执行定时任务
	//go job.DemoTask()

	//注册自动路由
	//web.AutoPrefix("api", &controller.UserController{})
	web.CtrlGet("/name", (*controller.UserController).Name)
	web.CtrlGet("/get/:id", (*controller.UserController).GetUserById)
	web.CtrlGet("/get/:id/:num", (*controller.UserController).GetUserByIdAndNum)
	//返回页面
	web.CtrlGet("/page/index", (*controller.PageController).Index)
	web.CtrlGet("/page/f", (*controller.PageController).F)

	//注册函数式路由
	controller.RegisterFunctionalRoutes()
	//web命名空间
	controller.RegisterNamespaceRoutes()

	//过滤器
	filter.RegisterFilters()

	//开启 Admin 管理后台
	web.BConfig.Listen.EnableAdmin = true
	web.BConfig.Listen.AdminAddr = "localhost"
	web.BConfig.Listen.AdminPort = 8088

	//web.BConfig.WebConfig.ViewsPath = "pages"

	//查看已注册路由
	tree := web.PrintTree()
	methods := tree["Data"].(web.M)
	for k, v := range methods {
		fmt.Printf("%s => %v\n", k, v)
	}

	//自定义模板函数
	web.AddFuncMap("bookName", bookName)

	web.Run()
}

// 自定义模板函数添加书名号
func bookName(in string) (out string) {
	out = "《" + in + "》"
	return
}

添加一个生成书名号的模板函数

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{.name | bookName}}
</body>
</html>

运行效果

3.4、其他模板函数

更多的模版函数可以参考 Beego 文档

4、静态文件

Beego 默认会将项目根目录下的 static 目录作为静态资源的存目录,请求静态资源默认添加前缀 /static,这个官方文档没有说,可以通过查看 Beego 项目源代码中的注释知道

自定义静态资源目录可以通过 web.SetStaticPath 函数添加

如下代码将目录 public 作为静态目录,请求前缀是 staticfile

web.SetStaticPath("/staticfile", "public")

在项目根目录下新建 static 目录,在statc 目录下新建 index.js 和 index.css 文件

index.css

.poetry {
    background: aqua;
}

index.js

function test(){
    var content = "咏院中丛竹"
    alert(content)
}

修改 index.html 为下面代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="/static/index.css" type="text/css" rel="stylesheet" />
    <script src="/static/index.js"></script>
</head>
<body>
    <h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1>
    <div class="poetry">
        <p>擢擢当轩竹,青青重岁寒。</p>
        <p>心贞徒见赏,箨小未成竿。</p>
    </div>
    <button onclick="test()">测试</button>
</body>
</html>

重启项目运行测试

5、Layout 设计

Beego 支持 layout 设计,例如你在管理系统中,整个管理界面是固定的,只会变化中间的部分

在 views 目录下新建 main.html,内容如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>main</h1>
<div>{{.Header}}</div>
<div class="container">{{.LayoutContent}}</div>
</body>
</html>

这里面,.Header 是可以随意定义的,笔者表示引入固定的header 部分,.LayoutContent 是Beego 规定的,用来表示页面中间变化的部分

在 views 目录下新建 header.html,代码看下面

<div>
  <h2>头部</h2>
</div>

在 views 目录下新建 login.html,表示页面中间的部分,代码看下面

<div>
    <h2>登录</h2>
</div>

在 page.go 中修改为下面代码

package controller

import (
	"github.com/beego/beego/v2/server/web"
)

type PageController struct {
	web.Controller
}

type Poetry struct {
	Name    string
	Author  string
	Content string
}

func (p *PageController) Index() {
	//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"

	//poetry := Poetry{
	//	Name:    "茉莉花",
	//	Author:  "许景迂",
	//	Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",
	//}
	//p.Data["poetry"] = &poetry

	//mp := make(map[string]string)
	//mp["name"] = "茉莉花"
	//mp["author"] = "江奎"
	//mp["content"] = "虽无艳态惊群目,幸有清香压九秋。应是仙娥宴归去,醉来掉下玉搔头"
	//p.Data["mp"] = mp

	flowers := []string{"梅", "兰", "竹", "菊"}
	p.Data["flowers"] = flowers

	//返回页面
	p.TplName = "index.html"
	//p.TplName = "index.tpl"
}

func (p *PageController) F() {
	p.Data["name"] = "水浒传"

	p.TplName = "f.html"
}

func (p *PageController) Main() {
	p.LayoutSections = make(map[string]string)
	p.LayoutSections["Header"] = "header.html"

	//模版
	p.Layout = "main.html"
	p.TplName = "login.html"
}

其中 Main 方法,p.Layout = "main.html" 指定模版,p.TplName = "login.html" 指定模版中间的页面,p.LayoutSections["Header"] = "header.html" 指定页面固定的部分

在 main.go 中添加路由,修改 main.go 为下面代码

package main

import (
	"beego-demo/controller"
	"beego-demo/filter"
	"fmt"
	"github.com/beego/beego/v2/core/config"
	"github.com/beego/beego/v2/server/web"
)

func main() {
	//通过config获取自定义配置
	workername, _ := config.String("workername")
	fmt.Println(workername)

	//执行定时任务
	//go job.DemoTask()

	//注册自动路由
	//web.AutoPrefix("api", &controller.UserController{})
	web.CtrlGet("/name", (*controller.UserController).Name)
	web.CtrlGet("/get/:id", (*controller.UserController).GetUserById)
	web.CtrlGet("/get/:id/:num", (*controller.UserController).GetUserByIdAndNum)
	//返回页面
	web.CtrlGet("/page/index", (*controller.PageController).Index)
	web.CtrlGet("/page/f", (*controller.PageController).F)
	web.CtrlGet("/page/main", (*controller.PageController).Main)

	//注册函数式路由
	controller.RegisterFunctionalRoutes()
	//web命名空间
	controller.RegisterNamespaceRoutes()

	//过滤器
	filter.RegisterFilters()

	//开启 Admin 管理后台
	web.BConfig.Listen.EnableAdmin = true
	web.BConfig.Listen.AdminAddr = "localhost"
	web.BConfig.Listen.AdminPort = 8088

	//web.BConfig.WebConfig.ViewsPath = "pages"

	//查看已注册路由
	tree := web.PrintTree()
	methods := tree["Data"].(web.M)
	for k, v := range methods {
		fmt.Printf("%s => %v\n", k, v)
	}

	//自定义模板函数
	web.AddFuncMap("bookName", bookName)

	web.Run()
}

// 自定义模板函数添加书名号
func bookName(in string) (out string) {
	out = "《" + in + "》"
	return
}

运行效果,访问 http://localhost:9090/page/main

下一讲:《Beego 使用教程 6:Web 输入处理》

至此完

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/602167.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何备考PMP才能一次通过?

PMP备考一个月就能通过&#xff0c;培训机构中就应该这么学&#xff01; PMP考试的难度其实并没有大家想象中的那么大&#xff0c;现在培训机构的通过率基本也在90%以上&#xff0c;而这90%以上也基本都是头一次参加考试很少有参加重考的学员。我就是在威班PMP培训了一个多月一…

「Java开发指南」如何用MyEclipse搭建GWT 2.1和Spring?(一)

本教程将指导您如何生成一个可运行的Google Web Toolkit (GWT) 2.1和Spring应用程序&#xff0c;该应用程序为域模型实现了CRUD应用程序模式。在本教程中&#xff0c;您将学习如何&#xff1a; 安装Google Eclipse插件为GWT配置一个项目搭建从数据库表到一个现有的项目GWT编译…

net7部署经历

1、linux安装dotnet命令&#xff1a; sudo yum install dotnet-sdk-7.0 或者直接在商店里安装 2、配置反向代理 127.0.0.1:5000》localhost 访问后报错 原因&#xff1a;数据表驼峰名&#xff0c; 在windows的数据表不区分大小写&#xff0c;但是在linux里面是默认区分的&…

【数据结构】基于顺序表实现通讯录

世界会向那些有目标和远见的人让路。&#x1f493;&#x1f493;&#x1f493; 目录 •&#x1f319;说在前面 &#x1f34b;基于顺序表的通讯录 • &#x1f330;1.技术要点 • &#x1f330;2.通讯录流程设计 &#x1f34b;通讯录基本量设计 • &#x1f330;1.定义联系…

PLM系统推荐:产品全生命周期管理最佳解决方案

PLM系统推荐&#xff1a;产品全生命周期管理最佳解决方案 在当今日益竞争激烈的市场环境中&#xff0c;企业如何高效管理其产品设计、开发和生命周期变得尤为重要。产品生命周期管理&#xff08;PLM&#xff09;系统正是为解决这一难题而诞生的。本文将为您详细介绍几款值得推荐…

HTTP免费升级到HTTPS攻略

HTTPS就是在HTTP的基础上加入了SSL&#xff0c;将一个使用HTTP的网站免费升级到HTTPS的关键就是申请一个免费的SSL证书 具体步骤如下 1 获取免费SSL证书 国内的JoySSL 提供不限量免费的SSL/TLS证书。根据自己的需求选择证书类型&#xff08;登录JoySSL官网&#xff0c;创建账号…

5.10开幕!虚拟动力多项数字人互动技术参展元宇宙生态博览会!

2024年5月10-12日&#xff0c;由广东鸿威国际会展集团有限公司、广州市虚拟现实行业协会主办的2024数字显示与元宇宙生态博览会将正式开幕。 亮点抢先看 虚拟动力 广州虚拟动力作为3D虚拟人全生态应用的产品技术开发与服务商&#xff0c;将携带无穿戴动捕技术、数字人穿戴式动…

【C++】Visual Studio 2019 给 C++ 文件添加头部注释说明

使用代码片段管理器&#xff0c;添加快捷插入代码文件说明 1. 效果 2. header.snippet 新建 header.snippet 文件&#xff0c;存放到某个文件夹 内容&#xff0c;自行更新 快捷名称&#xff0c;修改 Header 里面内容注释内容&#xff0c;修改 Code 里面内容 <?xml ver…

Linux中每当执行‘mount’命令(或其他命令)时,自动激活执行脚本:输入密码,才可以执行mount

要实现这个功能&#xff0c;可以通过创建一个自定义的mount命令的包装器&#xff08;wrapper&#xff09;来完成。这个包装器脚本会首先提示用户输入密码&#xff0c;如果密码正确&#xff0c;则执行实际的mount命令。以下是创建这样一个包装器的步骤&#xff1a; 创建一个名为…

Vue从入门到实战Day01

一、Vue快速上手 1. vue概念 概念&#xff1a;Vue是一个用于 构建用户界面的 渐进式 框架 构建用户界面&#xff1a;基于数据动态渲染页面渐进式&#xff1a;循序渐进的学习框架&#xff1a;一套完整的项目解决方案&#xff0c;提升开发效率 优点&#xff1a;大大提升开发效…

Garden Planner for Mac v3.8.62注册激活版:园林绿化设计软件

Garden Planner for Mac是一款专为苹果Mac OS平台设计的园林景观设计软件。这款软件的主要功能是帮助用户设计梦想中的花园&#xff0c;包括安排植物、树木、建筑物和其他物体。 Garden Planner for Mac提供了一个包含1200多种植物和物体符号的库&#xff0c;这些符号都可以进行…

torch教程

一 基本用法 1 torch.autograd.Function PyTorch 74.自定义操作torch.autograd.Function - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/344802526 虽然pytorch可以自动求导,但是有时候一些操作是不可导的,这时候你需要自定义求导方式。也就是所谓的 "Extending t…

图纸管理的高效策略与最佳实践

图纸管理的高效策略与最佳实践 在工程设计、产品研发和建筑行业中&#xff0c;图纸管理是一项至关重要的任务。随着项目规模的扩大和复杂性的增加&#xff0c;如何高效、有序地管理图纸已成为企业和团队关注的焦点。本文将为您介绍图纸管理的高效策略与最佳实践&#xff0c;帮助…

【iOS逆向与安全】网上gw如何自动登录与签到SM2,SM3,SM4算法加解密

1.下载 app 2.frida 调试 3.抓包查看接口 4.分析加密数据 5.易语言编写代码 1 .开始下载 下载好发现有越狱检测&#xff0c;检测点为&#xff1a; -[AppDelegate isJailBreak]; 于是编写插件xm代码 : %hook AppDelegate- (void)isJailBreak{NSLog("AppDelegate is…

【JavaEE初阶系列】——Servlet运行原理以及Servlet API详解

目录 &#x1f6a9;Servlet运行原理 &#x1f6a9;Servlet API 详解 &#x1f393;HttpServlet核心方法 &#x1f393;HttpServletRequest核心方法 &#x1f388;核心方法的使用 &#x1f534;获取请求中的参数 &#x1f4bb;query string &#x1f4bb;直接通过form表…

免费思维13招之二:第三方思维

思维02:第三方思维 第三方思维又叫第三方资费思维。是一种可以使你的产品免费但是你却依然赚钱的思维。 大家还记得之前讲的“餐厅免费吃饭却年赚百万”的案例吗?这个案例运用了多种免费思维的子思维,其中也用到了第三方资费思维,怎么运用的呢?韩女士,与各行各业合作,…

电脑上如何设置闹钟提醒 电脑闹钟提醒设置方法

在这个信息爆炸的时代&#xff0c;我们每个人每天都面临着无数的任务和约定。繁杂的工作与生活&#xff0c;让我时常感到应接不暇&#xff0c;一不小心就会遗漏某些重要事务&#xff0c;这给我带来不小的困扰。我相信&#xff0c;很多人都有过这样的经历&#xff0c;面对一堆待…

Jmeter性能测试(四)

一、遇到问题解决思路 1、检查请求头是否正确 2、检查请求参数是否正确 3、检查鉴权信息是否正确 4、检查变量作用域 5、检查数据提取是否正确(正则/json提取器) 二、请求头检查 1、在Http信息头管理器查看 2、注意这里的变量作用域是全局的 三、请求参数检查 1、在查看结…

演唱会新风:允许部分歌手闭麦,让观众先唱

演唱会市场的热度从2023年延续至今&#xff0c;出现了一些“倒反天罡”的现象。 例如&#xff1a;让歌迷在台下给歌手唱歌。 5月6日抖音娱乐榜第一的消息是“第一次见辟谣观众没假唱的”。原因是凤凰传奇在常州和北京鸟巢先后举办两场演唱会&#xff0c;其中鸟巢演唱会被认为…

2024年开抖音小店需要多少钱?你真的知道吗?最新入驻条件及费用

大家好&#xff0c;我是电商花花。 现在仍然有很多想开抖店&#xff0c;想做抖音小店&#xff0c;但是很多人都不知道投资一家抖音小店需要多少钱&#xff0c;今天花花就给大家讲一下做一家抖音小店需要投入多少资金&#xff0c;以及具体投入到哪些方面。 我们就说一下个体店…