想写个小网站,听说MVC过时了,流行MVVM,但是看了一下gin+vue+axios方式,发现还有一堆知识点要掌握,尤其是不喜欢nodejs和javascript方式的写法。算了,还是用beego来写吧。

1、首先参考https://beego.me

2、 获取Beego 和 Bee 的开发工具

我是用gopm get代替go get ,一开始有-u参数,但很长时间没反应。去掉-u立即下载成功。

由于我的$gopath设置的是:E:\goapp\,所以将从github下载的bee包复制到这个目录:E:\goapp\src\github.com\beego\bee

但这个目录下没有bee.exe工具。于是在这个目录下执行 go install,提示以下错误:

很明显,搜索的路径没有包括我所设置的的$gopath,也就是E:\goapp\    用go env 查看一下,gopath仍为:C:\Users\Administrator\go

在windows系统环境变量一看,原来是用户的gopath环境变量%USERPROFILE%\go覆盖了我设的系统的gopath环境变量E:\goapp\,于是将用户环境变量设为E:\goapp\。 重新打开cmd,到bee目录下执行go install 。然后可以在E:\goapp\bin下找到bee.exe了

3、开始写网站,打开cmd ,转到E:\goapp\src\ 目录下,执行

在E:\goapp\src\beego1下已生成了MVC网站,cmd中定位到E:\goapp\src\beego1目录下,执行

然后可以用浏览器打开http://localhost:8080/ 进行访问(若弹出防火墙提示,允许与否没关系,因为本机localhost不通过防火墙?)

4、用liteide打开beego1目录下的main.go,将所有内容用以下代码替换

Ctrl-S保存,刷新http://localhost:8080/,页面内容变成hello world ;而访问http://localhost:8080/main/get时则显示beego欢迎页,AutoRouter起了作用。 (同时bee工具热编译,无需重新编译执行。如需停止服务就用Ctrl-C),注意,在main包和controllers包各有一个MainController,互不影响。

5、上面的main包添加了静态文件支持。即,在/main.go文件中beego.Run()之前加入了   :     beego.BConfig.WebConfig.StaticDir["/static"] = "static"     则beego1\static目录下的文档可以直接通过浏览器访问。

6、不喜欢8080端口,直接打开E:\goapp\src\beego1\conf\app.conf修改即可;也可以用beego.BConfig.Listen.HTTPPort = 8081(更多设置可参考:https://blog.csdn.net/qq_33610643/article/details/53511058)

this.Ctx.Input.Params

首先修改controllers目录下的default.go如下

访问http://localhost:8080/main/params/a/b/c

显示:{"0":"a","1":"b","2":"c",":splat":"a/b/c"}

8、上传文件。

首先在beego1文件夹下新建upload文件夹

在controllers目录下的default.go中增加以下代码

相应import "fmt" 和 "path",然后访问:http://localhost:8080/main/upfile 上传文件

 

9、数据库支持。

参考:https://www.cnblogs.com/shanyou/p/3256906.html,决定使用postgresql数据库

从官网https://www.postgresql.org下载,这里有个可参考的安装教程https://www.cnblogs.com/LLLONG/p/3164508.html  以及这里https://blog.csdn.net/hanyoud/article/details/83294612

我在内网有个服务器是2008 sp2,在上面试试最新的11.1版本(由于官网很慢,改用迅雷大法下载),按向导安装,先是自动安装了VC++2013 VC++2017可再发行包,选择安装到E:盘,设置用户postgres的密码为1234 ,端口为默认5432,其他的一路next.

=============下面走了弯路,可以跳过===========

安装很顺利。但多出了个类似全家桶的stack builder,试了试安装不上,可能还是天朝网络影响,算了。

安装完不会用,在目录中找到pgadmin也用不了,度娘出来这个https://www.jb51.net/article/43061.htm,先看一下任务管理器中有了pg_ctl.exe,然后发现和别人的不一样,于是手工到E:\Program Files\PostgreSQL\11\data目录下找到了pg_hba.conf,参考:https://www.jb51.net/article/137062.htm,在pg_hba.conf配置文件最后加上以下内容(不太明白24或32的意思)

在liteide中Ctrl-B成功。

在psql终端中输入 help 显示帮助,其中sql 和psql有不同的帮助命令

      输入 \l    显示有一个名为postgres 的database

                     输入  \c  显示You are now connected to database "postgres" as user "postgres".

                     输入  \d  显示 Did not find any relations.

 什么意思?没有表?   继续输入以下命令:

终于显示有一个名为t的table了。

修改main.go,将dbname的值由postgres改为testdb,再Ctrl-B,这才想到忘记运行编译出来的程序了,尴尬!运行后,在psql中 用 \d命令,看到生成student表了。 用 \d student 命令查看表结构。

删除表可用:drop table student;(注意分号;) 

用 select * from  student;       查询student表中的数据。

终于OK了!

等等,还没测试中文。删除 student表,将main.go中的 tom 改为 汤姆。重新编译运行,嗯,没有乱码。

 11. web网站使用cookie也很重要。代码:

另,参考https://studygolang.com/topics/344

(1)、在写入cookies之前不能有其他输出
(2)、启用enablexsrf,在表单中应插入对应的值

12、session也是不可或缺的

 

 13.使用中间件。参考谢大神本尊的回复 https://gocn.vip/question/37 ,可惜谢大神没有为初学者讲清楚还要 import  "github.com/astaxie/beego/context", 折腾了半天,可参考这里:https://blog.csdn.net/wo541075754/article/details/79488460

具体代码如下(偷懒在上面关于session的代码基础上进行了修改。用chrome查看header的办法参考:http://www.mamicode.com/info-detail-2044411.html,办法也写在下面的代码中了)