beego语法与函数

th.Data["err"] = "密码错误"

</form>
    {{.err}}
    <div class="login_bg"></div>

Data的错误信息可以直接在前端页面显示出来,用两个大括号来调用

    //th.Redirect()     页面跳转,会改变页面路径
    //th.TplName =      页面渲染,传递数据(错误信息)
    //(镜像跳转)给前端返回一个页面    (路径,状态码)
    th.Redirect("/login",302)

镜像跳转(给前端返回一个跳转页面)


http状态码
1xx 请求发送成功,请继续发请求
2xx 请求成功
3xx 资源转移(重定向) 300 301 302
4xx 请求端错误,请求的没有没有 401 402 404
5xx 服务器端错误 500


            <form method="post" action="add" enctype="multipart/form-data">

在前端页面的表单中指定路由模式,和路径 通知服务器接受上传的数据

//1.把图片存到服务器
    th.SaveToFile("uploadname","./static/img/"+head.Filename)

函数的路径参数要以./开头

//用上传时间解决文件被覆盖
    time.Now().Format("2006-01-02-15-04-05")
    //获取文件后缀函数
    ext := path.Ext(head.Filename)
    //beego.Info(head.Filename,ext)
    //2.校验文件类型
    if ext != ".jpg" && ext != ".png" && ext != "jpeg" {
        th.Data["errmsg"] = "非法图片,再给你一次机会!"
        th.TplName = "add.html"
        return
    }
    //3.校验文件大小
    if head.Size > 500000{
        th.Data["errmsg"] = "整那么大干啥?服务器钱你给啊?"
        th.TplName = "add.html"
        return

    }

上传文件校验步骤

//指定获取数据库的表名
    table := o.QueryTable("Article")

用表名来获取数据库信息

{{range .articles}}
                    <tr>
                        <td>{{.Title}}</td>
                        <td><a href="#">查看详情</a></td>
                        <td>{{.Time.Format "2006-01-02 15:04:05"}}</td>
                        <td>{{.Content}}</td>
                        <td><a href="#" class="dels">删除</a></td>
                        <td><a href="#">编辑</a></td>
                        <td>财经新闻</td>
                    </tr>
            {{end}}

beego的视图语法,用来把数据库得到的数据展示在前端页面上

//分页处理
    //1.获取总记录数
    count, err := table.Count()
    //错误处理
    if err != nil {
        beego.Error("查询数据条目数错误!")
        th.TplName = "index.html"
        return
    }
    //2.定义每页显示的条数
    pageIndex := int64(2)
    //获取总页数.用浮点型传入参数后,会向上取整(整形会向下取整)
    pageCount := math.Ceil(float64(count) / float64(pageIndex))
    //在执行过程中打印提示信息
    beego.Info("count=",count,"pageIndex=",pageIndex,"pageCount=",pageCount)

分页处理

//只获取展示部分数据(获取部分数据)参数(展示数量,展示起始位置)  把数据放入容器
    table.Limit(page,start).All(&articles)

获取部分数据函数

<li><a href="/index?pageIndex=1">首页</a></li>
                                                    {{/*通过管道传参给pre*/}}
                <li><a href="/index?pageIndex={{.pageIndex | pre}}">上一页 </a> </li>
                                                    {{/*通过空格传递参数*/}}
                <li> <a href="index?pageIndex={{next .pageIndex .pageCount}}">下一页</a></li>
                <li><a href="/index?pageIndex={{.pageCount}}">末页</a></li>
                <li>共{{.count}}条记录/共{{.pageCount}}页/当前{{.pageIndex}}页</li>

前端的分页处理

//定义一个翻页运算函数
func getPre(pageIndex int)int  {
    //判断范围
    if pageIndex-1 <= 0 {
        return pageIndex
    }
    return pageIndex -1

}
func getNext(pageIndex int,pageCount int)int  {
    //判断范围
    if pageIndex + 1 > pageCount {
        return pageCount
    }
    return pageIndex + 1

}

翻页运算

//阅读数量的增加
    article.ReadNum += 1
    //更新数据库数据(对象)
    o.Update(&article)

用update来更新数据库,达到阅读数量的实现

         {{/*隐藏域传值*/}}
 <input name="articleId" value="{{.article.Id}}" hidden="hidden">

用隐藏域来传值,避免代码显示在前端网页上

//封装一个上传函数
func UploadFunc(th *ArticleController,filePath string)string {
    file, head, err := th.GetFile(filePath)
    defer file.Close()
    if err != nil {
        return ""
    }

    //用上传时间解决文件被覆盖
    time.Now().Format("2006-01-02-15-04-05")
    //获取文件后缀函数
    ext := path.Ext(head.Filename)
    //beego.Info(head.Filename,ext)
    //2.校验文件类型
    if ext != ".jpg" && ext != ".png" && ext != "jpeg" {
        th.Data["errmsg"] = "非法图片,再给你一次机会!"
        th.TplName = "add.html"
        return ""
    }
    //3.校验文件大小
    if head.Size > 500000 {
        th.Data["errmsg"] = "整那么大干啥?服务器钱你给啊?"
        th.TplName = "add.html"
        return ""
    }
    //在执行过程中打印信息
    //beego.Info(file,head)
    //把前端上传来的数据进行处理
    //1.把图片存到服务器
    th.SaveToFile(filePath, "./static/img/"+head.Filename+ext)
    return "/static/img/"+head.Filename+ext
}

封装函数(以便反复更新利用)

<script type="text/javascript">
    $(".dels").click(function(){
        if(!confirm("谁怂谁孙子,删不删?")){
            return false
        }
    })
</script>

js前端提示框,取消和确认

//和属性表建立多对多的关系
    Articles []*Article`orm:"reverse(many)"`
//和类型表建立多对一关系
    ArticleType *ArticleType`orm:"rel(fk)"`
    //和用户表建立多对多的正向关系
    Users []*User`orm:"rel(m2m)"`
//和属性表建立一对多反向的关系
    Articles []*Article`orm:"reverse(many)"`

models下 建立表与表之间的关系

 {{range .articleTypes}}
                <tr>
                    <td>{{.Id}}</td>
                    <td>{{.TypeName}}</td>
                    <td><a href="javascript:;" class="edit">删除</a></td>
                </tr>
                {{end}}

用视图函数把数据展示在视图页面

//多表一起查询(把文章和类型表格一起查询)
    table.Limit(page,start).RelatedSel("ArticleType").All(&articles)

查询多表关联数据操作


    $(".dels").click(function(){
        if(!confirm("谁怂谁孙子,删不删?")){
            return false
        }
    })
    $("#select").change(function () {
        $("#form").submit()

    })

用js语句来触发时间,对后端进行get请求

//保存登录用户名
    //调用cookie函数(key,value,保存时间)
    th.Ctx.SetCookie("userName",userName,3600 *24)

用cookie来储存用户名

cookie 
在客户端.浏览器
能够设置生存时间,当设置的时间失效的时候,就失效
一般安全性要求不高数据用cookie储存

session
在一定时间内保存用户数据
在服务器端
当浏览器关闭的时候,session失效
安全性要求高的数据一般存在session
//清除登录用户栏的信息
        th.Ctx.SetCookie("userName",userName,-1)

当失效时间设置为-1的时候,立刻清除数据

if userName != ""{
        th.Data["userName"] = userName
        //设置复选框的初始状态
        th.Data["checked"] = "checked"
    }else {
        th.Data["userName"] = userName
        //如果有用户登录信息的话则复选框为空
        th.Data["checked"] = ""

登录页面账户信息的复选框的设置

//在APP.conf配置文件内开启session的存储功能
sessionon = true

//设置session
    th.SetSession("userName",userName)

func (th *ArticleController)ShowIndex() {
    //校验session
    userName := th.GetSession("userName")
//退出登录时删除session
    th.DelSession("userName")

用session把用户登录信息保存到服务器

//第一种获取用户浏览记录
    //o.LoadRelated(&article,"Users")

    //第二种多对多获取浏览记录的查询方法(只能获取部分数据)
    table := o.QueryTable("User")
    //创建一个临时容器
    var users []models.User
    //多对多的过滤查询                                    去重函数  把查询的的数据放入容器
    table.Filter("Articles__Article__Id",article.Id).Distinct().All(&users)
    //把数据传递给前端
    th.Data["users"] = users

获取用户浏览记录操作

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,093评论 1 32
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,156评论 0 3
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,453评论 1 45
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,734评论 0 10
  • 青春年少少年时, 梦时花语语未休。 春来总是劳心神, 但问谁人不思春?
    若小言阅读 669评论 9 26