beego07----web博客
生活随笔
收集整理的这篇文章主要介绍了
beego07----web博客
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
conf/app.conf
appname = blog1 httpport = 8080 runmode = dev name=admin pwd=admincontrollersmy/attach.go
package controllersmyimport ("github.com/astaxie/beego" //导入beego包"io""net/url""os" )type AttachmentController struct {beego.Controller }func (c *AttachmentController) Get() {filePath, err := url.QueryUnescape(c.Ctx.Request.RequestURI[1:]) //去除最开头的一个/if err != nil {c.Ctx.WriteString(err.Error())return}f, err := os.Open(filePath)if err != nil {c.Ctx.WriteString(err.Error())return}defer f.Close()_, err = io.Copy(c.Ctx.ResponseWriter, f) //2个参数是输出流和输入流if err != nil {c.Ctx.WriteString(err.Error())return} }controllersmy/default.go
//model的上层,下层调用models来操作数据库package controllersmy //跟外面的包名一致import ("github.com/astaxie/beego" //导入beego包 )type MainController struct {beego.Controller //"github.com/astaxie/beego"包里面的Controller }func (c *MainController) Get() {c.TplName = "index.html" //返回页面名字c.Data["isHome"] = truec.Data["isCookie"] = checkCookie(c.Ctx) }controllersmy/login.go
package controllersmyimport (//"fmt""github.com/astaxie/beego" //导入beego包"github.com/astaxie/beego/context"//"net/url" )type LoginController struct {beego.Controller }func (c *LoginController) Get() {c.Data["islogin"] = trueisExit := c.Input().Get("exit") == "true"if isExit {c.Ctx.SetCookie("name", "", -1, "/") //-1就会删除cookiec.Ctx.SetCookie("pwd", "", -1, "/")return //不需要指定跳的首页了 }c.TplName = "login.html" //返回页面名字 }func (c *LoginController) Post() {//c.TplName = "login.html" //返回页面名字c.Data["islogin"] = true//c.Ctx.WriteString(fmt.Sprint(c.Input())) //获取post时候带过来的参数,WriteString页面就跳转了不执行下面的了,uname := c.Input().Get("username")pwd := c.Input().Get("pwd")autologin := c.Input().Get("auto") == "on" //bool值//跟app.conf里面的用户名和密码比对if beego.AppConfig.String("name") == uname && beego.AppConfig.String("pwd") == pwd {maxAge := 0if autologin { //自动登陆就要设置cookiemaxAge = 1<<31 - 1}c.Ctx.SetCookie("name", uname, maxAge, "/") //保存时间和保存路径c.Ctx.SetCookie("pwd", uname, maxAge, "/") //保存时间和保存路径c.Redirect("/welcome", 301) //登陆后重定向到欢迎页面//c.TplName = "welcome.html" //返回页面名字,没有走过滤器controller,Redirect走了过滤器controller,} else {return}return }//整个包可访问 func checkCookie(ctx *context.Context) bool {ck, err := ctx.Request.Cookie("name") //获取请求带来的cookieif err != nil {return false}uname := ck.Valueck, err = ctx.Request.Cookie("pwd") //获取请求带来的cookieif err != nil {return false}pwd := ck.Valuereturn beego.AppConfig.String("name") == uname && beego.AppConfig.String("pwd") == pwd }controllersmy/topic.go
package controllersmyimport ("blog1/models""github.com/astaxie/beego" //导入beego包"path" )type TopicController struct {beego.Controller }func (c *TopicController) Get() {c.TplName = "topic.html" //返回页面名字c.Data["isTopic"] = truec.Data["isCookie"] = checkCookie(c.Ctx) }func (c *TopicController) Post() {if !checkAccount(c.Ctx) { //没有账号登陆页面c.Redirect("/login", 302)return}title := c.Input().Get("title")content := c.Input().Get("content")//获取附件,上传删除修改跟cmss一样,_, fh, err = this.GetFile("attachment")if err != nil {beego.Error(err)}var attachFilename stringif fh != nil {//保存附件attachFilename = fh.FileNamebeego.Info(attachFilename)//filement:tmp.go//path:attachments/tmp.goerr = this.SaveToFile("attachment", path.Join("attachments", attachFilename)) //path的第一个参数是工程目录下attachments文件夹名字 }if len(id) == 0 {err := models.AddTopic(title, content, attachFilename)} else {err := models.ModifyTopic(id, title, content, attachFilename)}if err != nil {beego.Debug(err)}c.Redirect("/topic/view"+id, 302) //添加完之后跳转到查看页面 }func (c *TopicController) Add() {c.TplName = "topic_add.html" //返回页面名字c.Ctx.WriteString("topic_add") }func (c *TopicController) View() { //查看单偏文章c.TplName = "topic_add.html"topic, err := models.GetOneTopic(c.Ctx.Input.Params("0")) //localhost:8080/topic/view/2343, Params("0")是2343if err != nil {c.Redirect("/", 302)}c.Data["Topic"] = topic//如果要获取文章的回复,就到这个写reply, err := models.GetAllApply(c.Ctx.Input.Params("0")) //localhost:8080/topic/view/2343, Params("0")是2343if err != nil {c.Redirect("/", 302)}c.Data["reply"] = reply }func (c *TopicController) Modify() { //查看单偏文章tid := c.Input().Get("id") //获取url中传过来的id topic, err := models.GetOneTopic(tid) //localhost:8080/topic/view/2343, Params("0")是2343if err != nil {c.Redirect("/", 302)return}c.Data["Topic"] = topicc.Data["id"] = idc.Redirect("/", 302) }func (c *TopicController) Delete() {if !checkAccount(c.Ctx) { //没有账号登陆页面c.Redirect("/login", 302)return}err := models.DeleteTopic(c.Ctx.Input.Params("0"))if err != nil {beego.Error(err)}c.TplName = "topic_add.html" }controllersmy/welcome.go
package controllersmy //跟外面的包名一致import ("blog1/models"//"fmt""github.com/astaxie/beego" //导入beego包 )type WelcomeController struct {beego.Controller //"github.com/astaxie/beego"包里面的Controller }func (c *WelcomeController) Get() {op := c.Input().Get("op")beego.Debug("aaa")switch op {case "add"://c.Ctx.WriteString(fmt.Sprint(c.Input()))name := c.Input().Get("name")if len(name) == 0 {break}err := models.AddCatory(name)if err != nil {beego.Debug(err)return}case "del":beego.Debug("333")//c.Ctx.WriteString(fmt.Sprint(c.Input()))id := c.Input().Get("id")if len(id) == 0 {break}err := models.DelCatory(id)if err != nil {beego.Debug(err)}}c.Data["welcome"] = truevar err errorc.Data["Categories"], err = models.GetAllCategory(false)beego.Debug("111")beego.Debug(c.Data["Categories"])if err != nil {beego.Debug(err)}c.TplName = "welcome.html" //返回页面名字,控制器之后写页面的名字, }model/models.go
//操作数据库层,control调用,//使用beego的orm,先要创建好结构,然后将结构提交给orm进行创建表 package modelsimport ("github.com/Unknwon/com""github.com/astaxie/beego""github.com/astaxie/beego/orm" //导入beegoorm的路径,_ "github.com/mattn/go-sqlite3" //go-sqlite3的驱动程序,_表示只执行初始化函数,"os""path""strconv""strings""time" )const (_DB_NAME = "data/beego1.db"_SQLITE3_DRIVER = "sqlite3" )//后面再添加字段,也可以动态在表中增加 type Category struct {Id int64 //名称是Id,类型是int32或者int64,orm就认为是主键Title string //不指定长度,默认是255字节Created time.Time `orm:"index"` //创建时间,`orm:"index"`是tag,表示建立索引,Views int64 `orm:"index"` //浏览次数TopicTime time.Time `orm:"index"`newziduan string }// //打印 // beego.Trace("trace") // beego.Info("info") // beego.Debug("debug") // beego.Warn("warn") // beego.Error("error") type Topic struct {Id int64Uid int64Title stringContent string `orm:"size(5000)"`Attachment stringCreated time.Time `orm:"index"` //创建时间,`orm:"index"`是tag,Updated time.Time `orm:"index"` //创建时间,`orm:"index"`是tag,Views int64 `orm:"index"` //浏览次数 Author stringReplayTime time.Time `orm:"index"` }func RegisterDB() {if !com.IsExist(_DB_NAME) { //数据文件不存在就人为创建 os.MkdirAll(path.Dir(_DB_NAME), os.ModePerm)os.Create(_DB_NAME)}//orm需要先注册模型Category、Topicorm.RegisterModel(new(Category), new(Topic))//注册驱动 orm.RegisterDriver(_SQLITE3_DRIVER, orm.DRSqlite)//注册默认数据库,可以是多个数据库,不管有几个数据库,默认数据库名字要叫default//驱动名称,数据库路径,最大连接数orm.RegisterDataBase("default", _SQLITE3_DRIVER, _DB_NAME, 10) }func AddCatory(name string) error {beego.Debug("aaa1")o := orm.NewOrm() //获取orm对象o.Using("default")c := &Category{Title: name, Created: time.Now(), Views: 11, TopicTime: time.Now()} //创建Category对象,title=传进来的name qs := o.QueryTable("category") //查询判断name是否被用了,使用的是beego的查询,Category是表名,err := qs.Filter("title", name).One(c) //根据title找到category,One(c)预期只有一个, beego.Debug(err)if err == nil { //==nil表示找到了 beego.Debug(err)return err}beego.Debug("aaa")//否则插入id, err1 := o.Insert(c)beego.Debug("cc")if err1 != nil { //err != nil表示插入失败 beego.Debug(err1)return err1}beego.Debug(id)beego.Debug("bbb")return nil }func GetAllCategory(isPaixu bool) ([]*Category, error) { //返回元素类型为Category的slice和erroro := orm.NewOrm()o.Using("default")cs := make([]*Category, 0) //定义一个sliceqs := o.QueryTable("category")var err errorif isPaixu {_, err = qs.All(&cs)} else {_, err = qs.OrderBy("-created").All(&cs) //根据created降序 }return cs, err }func DelCatory(id string) error {cid, err := strconv.ParseInt(id, 10, 64) //10进制,64位大小if err != nil {return err //人为非法操作 }o := orm.NewOrm()cat := &Category{Id: cid} //删除必须要指定主键,如果不知道主键就要QueryTable,Filter操作_, err = o.Delete(cat) //前面下横线表示不得到,否则你不使用就会报错return err }func AddTopic(name, con label, attachment string) error {//空格作为多个标签的分割,strings.Split(label, " ")通过空格把string分割成slice,//strings.Join将slice组合成string,label:="$"+strings.Join(strings.Split(label, " "), "#$") + "#"o := orm.NewOrm() //获取orm对象o.Using("default")topic := &Topic{Title: name,Created: time.Now(),Views: 11,}topic.Title := strings.Replace(strings.Replace(Topic.Label, "#", " ", -1),"$", "", -1)//先把#变成空格,然后去除$, _, err1 := o.Insert(topic)if err1 != nil { //err != nil表示插入失败 beego.Debug(err1)return err1}return nil }func GetOneTopic(id string) (*Topic, error) {tidnum, err := strconv.ParseInt(id, 10, 64) //把10进制的转成64位if err != nil {return nil, err}o := orm.NewOrm()topic := new(Topic)qs := o.QueryTable("topic")err = qs.Filter("id", tidnum).One(topic) //理论上只有一个,qs.Filter("id", tidnum).All(&topic)是获取所有, err = qs.Filter("labels__contains", "$"+label+"#")//模糊查询,包含查询,if err != nil {return nil, err}topic.Views++ //浏览数加一_, err = o.Update(topic) //更新return topic, err }func ModifyTopic(id, title, content string) error {tidnum, err := strconv.ParseInt(id, 10, 64) //把10进制的转成64位if err != nil {return err}o := orm.NewOrm()topic := &Topic{Id: tidnum}if o.Read(topic) == nil {topic.Title = titletopic.Content = contento.Update(topic)}return err }func DeleteTopic(id, title, content string) error {cid, err := strconv.ParseInt(id, 10, 64) //10进制,64位大小if err != nil {return err //人为非法操作 }o := orm.NewOrm()top := &Topic{Id: cid} //删除必须要指定主键,如果不知道主键就要QueryTable,Filter操作//先创建Topic对象,然后根据这个对象进行删除,_, err = o.Delete(top) //前面下横线表示不得到,否则你不使用就会报错return err }routers/router.go
package routersimport ("blog1/controllersmy""github.com/astaxie/beego""os" )func init() {beego.Router("/", &controllersmy.MainController{}) //"blog1/controllersmy"里面的 &controllersmybeego.Router("/login", &controllersmy.LoginController{}) //"blog1/controllersmy"里面的 &controllersmybeego.Router("/welcome", &controllersmy.WelcomeController{})beego.Router("/topic", &controllersmy.TopicController{})beego.Router("/topic/add", &controllersmy.TopicController{}, "post:Add") //是post请求,并且是add方法,beego.Router("/topic/delete", &controllersmy.TopicController{}, "get:delete")//创建附件目录attachmentsos.Mkdir("attachments", os.ModePerm)//作为静态文件将附件反馈出来beego.SetStaticPath("/attachments", "attachment")//不作为静态文件,作为一个控制器来处理beego.Router("/attachment/:all", &controllersmy.AttachmentController{}) }views/index.html
{{template "header" .}} <title>首页</title><style type="text/css"></style> </head><body> {{template "navbar" .}}<!-- get请求就用a标签就可以了,post请求还要写一个表单 --><form method="POST" action="/login">表单登陆<input name="username" id="uname"/><input name="pwd"/ id="pwd"><input name="auto"/><input type="submit" onclick="return checkInput();"><input type="button" onclick="return backHome();">回到首页</input></form>{{if .isCookie}}有cokie了{{end}}<script src="/static/js/reload.min.js"></script><script type="text/javascript">function checkInput(){var name = document.getElementById("uname")if (name.value.length == 0) {alert("输入账号")return false//不提交表单 }var pwd = document.getElementById("pwd")if (pwd.value.length == 0) {alert("输入账号")return false//不提交表单 }return true//提交表单 }function backHome(){window.location.href = "/"return false//表单一直不提交 }</script> </body> </html>views/login.html
{{template "header" .}} <title>登陆成功</title><style type="text/css"></style> </head><body>{{template "navbar" .}} 登陆成功<script src="/static/js/reload.min.js"></script> </body>views/T.head.tpl
{{define "header"}}<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link rel="shortcut icon" href="" type="image/x-icon" /><!-- <link id="mobile-style" type="text/css" rel="stylesheet" href="/static/css/main.css"><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script><link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"><link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"><script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> --> {{end}}views/T.navbar.tpl
{{define "navbar"}} <!-- if .isHome是contrloller传递进来的值 --><div {{if .isHome}}class="active"{{end}} style="height:100px;width:400px;background-color:red;display:inline-block;">首页</div><div {{if .islogin}}class="active"{{end}} style="height:100px;width:400px;background-color:blue;display:inline-block;">登陆</div><ul class="nav navber-nav">{{if .islogin}}<li>登陆成功</li>{{else}}<li>首页</li>{{end}}</ul> {{end}}views/topic.html
{{template "header" .}} <title>topic</title><style type="text/css"></style> </head><body>{{template "navbar" .}} {{.Topic.Title}} {{.Topic.Content}} {{.Topic.Attachment}} {{$tid := .Topic.Id}} <!-- 这就是一个模版变量 --> {{$isLogin := .IsLogin}} <script src="/static/js/reload.min.js"></script>{{if $isLogin}} <!-- 模版变量使用 --><a href="/topic/modify?id={{.Tid}}&tid={{$tid}}">修改文章</a> <!-- 模版变量的使用 -->{{end}}<form method="POST" action="/topic"><input name="name" id="name"/><input name="op" id="op"/><input type="file" name="attachment">文章附件</input><input type="submit">添加文章</input></form> </body>views/welcome.html
{{template "header" .}} <title>huayin</title><style type="text/css"></style> </head><body> {{template "navbar" .}}欢迎你<script src="/static/js/reload.min.js"></script><tbody>{{range .Categories}}<th>{{.Id}}</th><th>{{.Title}}</th><th>{{.TopicTime}}</th><a href="/welcome?op=del&id={{.Id}}">删除</a><br>{{end}}</tbody>><form method="Get" action="/welcome"><input name="name" id="name"/><input name="op" id="op"/><input type="submit">add添加del删除</input></form> </body> </html>main.go
package mainimport ("blog1/models"_ "blog1/routers""github.com/astaxie/beego""github.com/astaxie/beego/orm" )func main() {orm.Debug = trueorm.RunSyncdb("default", false, true) //建表,建立的数据库在data目录下, beego.Run() }func init() { //初始化数据库,使用navicat premiun查看数据库 models.RegisterDB() }
转载于:https://www.cnblogs.com/yaowen/p/8182192.html
总结
以上是生活随笔为你收集整理的beego07----web博客的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Java并发编程实践读书笔记(3)任务执
- 下一篇: 城市联动