点击写文章,我们进入写文章的页面,当用户点击按钮进行提交后,应该将文章的数据存入到数据库中。

一、数据库

首先我们先设计数据库,用户提交的文章,包含标题,标签,简介,内容, 创建时间等。

在mysqlUtils.go文件中,添加article表的操作:

//创建文章表
func CreateTableWithArticle(){sql:=`create table if not exists article(id int(4) primary key auto_increment not null,title varchar(30),author varchar(20),tags varchar(30),short varchar(255),content longtext,createtime int(10));`ModifyDB(sql)
}

二、Model

在model目录下创建一个go文件:article_model.go

package models
​
import "myblog/utils"
​
type Article struct {Id         intTitle      stringTags       stringShort      stringContent    stringAuthor     stringCreatetime int64//Status int //Status=0为正常,1为删除,2为冻结
}
​
​
​
//---------数据处理-----------
func AddArticle(article Article) (int64, error) {i, err := insertArticle(article)return i, err
}
​
​
​
//-----------数据库操作---------------
​
//插入一篇文章
func insertArticle(article Article) (int64, error) {return utils.ModifyDB("insert into article(title,tags,short,content,author,createtime) values(?,?,?,?,?,?)",article.Title, article.Tags, article.Short, article.Content, article.Author, article.Createtime)
}

目前我们只是写文章,所以需要的是添加数据。

三、Controller

首先创建一个controller文件,add_article_controller.go。

package controllers
​
import ("fmt""myblog/models""time"
)
​
type AddArticleController struct {BaseController
}
​
/*
当访问/add路径的时候回触发AddArticleController的Get方法
响应的页面是通过TpName*/
func (this *AddArticleController) Get() {this.TplName = "write_article.html"
}
​
//通过this.ServerJSON()这个方法去返回json字符串
func (this *AddArticleController) Post() {
​//获取浏览器传输的数据,通过表单的name属性获取值title := this.GetString("title")tags := this.GetString("tags")short := this.GetString("short")content := this.GetString("content")fmt.Printf("title:%s,tags:%s\n", title, tags)
​//实例化model,将它出入到数据库中
​art := models.Article{0, title, tags, short, content, "千锋教育", time.Now().Unix()}_, err := models.AddArticle(art)
​//返回数据给浏览器var response map[string]interface{}if err == nil {//无误response = map[string]interface{}{"code": 1, "message": "ok"}} else {response = map[string]interface{}{"code": 0, "message": "error"}}
​this.Data["json"] = responsethis.ServeJSON()
​
}

如果用户请求写文章路径,会展示write_article.html页面。添加完信息后,点击提交按钮,进行提交数据。

然后注册一个新的路由:

//写文章
beego.Router("/article/add", &controllers.AddArticleController{})

四、View

我们在views目录下创建一个html文件(write_article.html),用于写文章。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>写文章</title><link href="../static/css/blogsheet.css" rel="stylesheet"><script src="../static/js/lib/jquery-3.3.1.min.js"></script><script src="../static/js/lib/jquery.url.js"></script><script src="../static/js/blog.js"></script>
</head>
<body>
​
{{template "block/nav.html" .}}
​
<div id="main"><form id="write-art-form" method="post"><div>标题</div><input type="text" placeholder="请输入标题" name="title" ><div>标签</div><input type="text" placeholder="请输入标签" name="tags" ><div>简介</div><textarea placeholder="请输入简介" name="short"></textarea><div>内容</div><textarea id="content" placeholder="请输入内容" name="content"></textarea><input id="write-article-id" hidden name="id" ><br><button type="button" onclick="history.back()">返回</button><button type="submit" id="write-art-submit">提交</button></form>
</div>
​
</body>
</html>

接下来写js脚本文件,打开static/js目录下的blog.js文件。

    //添加文章的表单$("#write-art-form").validate({rules: {title: "required",tags: "required",short: {required: true,minlength: 2},content: {required: true,minlength: 2}},messages: {title: "请输入标题",tags: "请输入标签",short: {required: "请输入简介",minlength: "简介内容最少两个字符"},content: {required: "请输入文章内容",minlength: "文章内容最少两个字符"}},submitHandler: function (form) {var urlStr = "/article/add";alert("urlStr:" + urlStr);$(form).ajaxSubmit({url: urlStr,type: "post",dataType: "json",success: function (data, status) {alert(":data:" + data.message);setTimeout(function () {window.location.href = "/"}, 1000)},error: function (data, status) {alert("err:" + data.message + ":" + status)}});}})

五、运行

运行项目后,打开浏览器,登录后进入首页,点击写文章:

然后进入写文章页面:

点击按钮进行提交,然后查询数据库,数据已经被插入进去了:

Goweb开发之Beego框架实战:第八节 写文章功能相关推荐

  1. iOS开发之SceneKit框架--实战地月系统围绕太阳旋转

    1.创建地月太阳系统scn文件 注意:moon在earth结构下,earth和moon在sun结构下. 2.获取scn中模型的对应节点和自转(太阳为例) 获取节点: name是对应的Identity字 ...

  2. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

  3. iOS开发之Accounts框架详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之Accounts框架详解 Accounts框架是iOS原生提供的一套账户管理框架,其支持Facebook,新浪微博 ...

  4. Android监听作用,Android开发之CheckBox的简单使用与监听功能示例

    本文实例讲述了Android开发之CheckBox的简单使用与监听功能.分享给大家供大家参考,具体如下: activity_main.xml android:layout_width="ma ...

  5. JavaEE开发之SpringBoot框架深入剖析项目实战(魔乐科技)

    课程目录& `) t. s  # W, g, ]" O         第1篇: SpringBoot入门" _0 ?2 t- e; f, r         小节1: S ...

  6. beego model获取controller_Goweb开发-Beego框架实战教程:项目搭建及注册用户

    一.搭建项目 首先打开终端进入gopath下的src目录,然后执行以下命令,创建一个beego项目: bee new myblogweb 运行效果如下: 然后通过goland打开该项目: 我们打开co ...

  7. (0068)iOS开发之AutoLayout框架Masonry使用心得

    苹果官方给出了一些有关自动布局的建议 不论用interfaceBuilder还是用代码来实现自动布局,这些建议都是适用的. (1)不用view的frame.bounds.center来指定view的形 ...

  8. iOS开发之Masonry框架-源码解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架.Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

  9. iOS开发之Masonry框架源码解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

最新文章

  1. 医疗信息化:高可用、安全两手都要硬
  2. 用Docker安装Gitlab
  3. FreeBSD上安装Cassandra 3.10
  4. Shell Basic
  5. linux系统添加网卡驱动,Linux 2.6.35内核配置和网卡驱动添加
  6. boost::log模块实现从设置文件初始化库的示例,具有自定义过滤器和格式化程序工厂的属性
  7. different styles of button in footer area
  8. 【附源码】为了帮助程序员谈恋爱,我做了这个APP
  9. hog函数的用法 python_Python常见内置函数用法(三)
  10. java 持续集成工具_Jenkins-Jenkins(持续集成工具)下载 v2.249.2官方版--pc6下载站
  11. Linux: chmod 和 chown用法小结
  12. AndroidStudio_gradle依赖相关错误的处理_Minimum supported Gradle version is 6.5. Current等---Android原生开发工作笔记228
  13. [转载] python 判断字符串是否包含另一个字符串_强烈推荐:Python字符串(string)方法整理(一)...
  14. Vs2010中水晶报表引用及打包
  15. IMPORT MULTIPLE JS
  16. 结构变量输入不正确的顺序可能会导致不正确的操作结果
  17. 健身管理系统一站式智能化健身管理体验
  18. linux下终端快捷键
  19. 光立方原理讲解_3D打印设备SLA工艺原理是什么?
  20. c语言编程一个超市购物程序,急求一超市的销售记录C程序(各位大哥帮帮忙啊!)...

热门文章

  1. C#使用委托实现信用卡用户定时还款功能
  2. 归并排序 (递归+非递归)
  3. 我敢说,没人能超过这份产品经理推荐书单(40本)!
  4. JMeter直连数据库报错Uncaught Exception java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z
  5. 位与:一个数1的结果
  6. 分布式IM原理与实战: 从0到1打造即时通讯云
  7. html关灯游戏,关灯小游戏 - 在线打字测试(dazi.kukuw.com)
  8. PR时间轴模板 企业发展融资历程PR动态图形模板MOGRT
  9. spring同类方法调用事务使用说明
  10. Linux -- vim编辑器使用教程