一、搭建项目

首先打开终端进入gopath下的src目录,然后执行以下命令,创建一个beego项目:

bee new myblogweb

运行效果如下:

然后通过goland打开该项目:

我们打开conf包下的配置文件:app.conf文件,修改端口号为8080:

appname = myblogwebhttpport = 8080runmode = dev

然后在终端中进入该项目目录,然后运行项目:

我们可以看到,项目已经运行了,并且监听在8080的端口上。接下来我们打开浏览器输入网址:http://127.0.0.1:8080/,然后可以看到欢迎界面:

二、注册功能

2.1model

首先我们先在创建一个数据库:

我们先创建一个工具包utils,然后创建一个go文件,用于做mysql的工具类,里面提供连接数据库和创建表的功能。

首先提供一个初始化方法:

func InitMysql() {    fmt.Println("InitMysql....")    driverName := beego.AppConfig.String("driverName")​    //注册数据库驱动    orm.RegisterDriver(driverName, orm.DRMySQL)​    //数据库连接    user := beego.AppConfig.String("mysqluser")    pwd := beego.AppConfig.String("mysqlpwd")    host := beego.AppConfig.String("host")    port := beego.AppConfig.String("port")    dbname := beego.AppConfig.String("dbname")​    //dbConn := "root:yu271400@tcp(127.0.0.1:3306)/cmsproject?charset=utf8"    dbConn := user + ":" + pwd + "@tcp(" + host + ":" + port + ")/" + dbname + "?charset=utf8"​    //dbConn := "root:yu271400@tcp(127.0.0.1:3306)/cmsproject?charset=utf8"    dbConn := user + ":" + pwd + "@tcp(" + host + ":" + port + ")/" + dbname + "?charset=utf8"​    db, _ = sql.Open(driverName, dbConn)

然后设计一下数据表,我们需要用户的id,并且作为主键,用户名username和密码password,还有状态status,这个用于标记该用户是否被删除,0表示正常状态,1表示删除。还要就是注册时间,我们用整型的时间戳来表示即可,所以sql语句如下:可以直接操作数据库创建,也可以通过代码进行创建:

//创建用户表func CreateTableWithUser() {    sql := `CREATE TABLE IF NOT EXISTS users(        id INT(4) PRIMARY KEY AUTO_INCREMENT NOT NULL,        username VARCHAR(64),        password VARCHAR(64),        status INT(4),        createtime INT(10)        );`​    ModifyDB(sql)}

然后再提供一个方法,用于执行sql语句:

//操作数据库func ModifyDB(sql string, args ...interface{}) (int64, error) {    result, err := db.Exec(sql, args...)    if err != nil {        log.Println(err)        return 0, err    }    count, err := result.RowsAffected()    if err != nil {        log.Println(err)        return 0, err    }    return count, nil}

再提供一个方法,用于之后的数据库操作:

​//查询func QueryRowDB(sql string) *sql.Row{    return db.QueryRow(sql)}

然后再models中创建一个model文件:

package models​import (    "myblogweb/utils"    "fmt")​type User struct {    Id         int    Username   string    Password   string    Status     int // 0 正常状态, 1删除    Createtime int64}​//--------------数据库操作-----------------​//插入func InsertUser(user User)(int64, error){    return utils.ModifyDB("insert into users(username,password,status,createtime) values (?,?,?,?)",        user.Username,user.Password,user.Status,user.Createtime)}​//按条件查询func QueryUserWightCon(con string)int{    sql := fmt.Sprintf("select id from users %s",con)    fmt.Println(sql)    row:=utils.QueryRowDB(sql)    id :=0    row.Scan(&id)    return id}​//根据用户名查询idfunc QueryUserWithUsername(username string) int{    sql := fmt.Sprintf("where username='%s'",username)    return QueryUserWightCon(sql)}​//根据用户名和密码,查询idfunc QueryUserWithParam(username ,password string)int{    sql:=fmt.Sprintf("where username='%s' and password='%s'",username,password)    return QueryUserWightCon(sql)}

2.2 view

我们先在views包下,创建一个html页面:register.html。

    注册
登录 注册​ ​

​​

Welcome

Register

​ {{/*背景动画*/}}

页面效果:

添加表单验证:

我们使用jquery来实现js部分,在js目录下,创建子目录lib,在里面放jquery框架文件,并在页面中引入。

然后重新创建一个js文件:blog.js

首先添加表单验证:

$(document).ready(function () {    //注册表单验证    $("register-from").validate({        rules:{            username:{                required:true,                rangelength:[5,10]            },            password:{                required:true,                rangelength:[5,10]            },            repassword:{                required:true,                rangelength:[5,10],                equalTo:"#register-password"            }        },        messages:{            username:{                required:"请输入用户名",                rangelength:"用户名必须是5-10位"            },            password:{                required:"请输入密码",                rangelength:"密码必须是5-10位"            },            repassword:{                required:"请确认密码",                rangelength:"密码必须是5-10位",                equalTo:"两次输入的密码必须相等"            }        },        submitHandler:function (form) {            var urlStr = "/register";            // alert("urlStr:"+urlStr)            $(form).ajaxSubmit({                url:urlStr,                type:"post",                dataType:"json",                success:function (data,status) {                    alert("data:"+data.message)                    if (data.code == 1){                        setTimeout(function () {                            window.location.href="/login"                        },1000)                    }                },                err:function (data,status) {                    alert("err:"+data.message+":"+status)                }            })        }    })})

当用户点击表单的submit按钮,会跳转到/register路径,而因为设置为post请求,所以我们可以在post中完成表单的注册。如果注册成功,再跳转到/login路径。

2.3 controller

我们在controllers包下创建一个新的controller,用来处理用户的注册:

package controllers​import "github.com/astaxie/beego"​type RegisterController struct {    beego.Controller}​func (this *RegisterController) Get(){    this.TplName = "register.html"}​func (this *RegisterController) Post() {​    //获取表单信息    username := this.GetString("username")    password := this.GetString("password")    repassword := this.GetString("repassword")    fmt.Println(username, password, repassword)    log.INFO(username, password, repassword)​    //注册之前先判断该用户名是否已经被注册,如果已经注册,返回错误    id := models.QueryUserWithUsername(username)    fmt.Println("id:", id)    if id > 0 {        this.Data["json"] = map[string]interface{}{"code": 0, "message": "用户名已经存在"}        this.ServeJSON()        return    }​    //注册用户名和密码    //存储的密码是md5后的数据,那么在登录的验证的时候,也是需要将用户的密码md5之后和数据库里面的密码进行判断    password = utils.MD5(password)    fmt.Println("md5后:", password)​    user := models.User{0, username, password, 0, time.Now().Unix()}    _, err := models.InsertUser(user)    if err != nil {        this.Data["json"] = map[string]interface{}{"code": 0, "message": "注册失败"}    } else {        this.Data["json"] = map[string]interface{}{"code": 1, "message": "注册成功"}    }    this.ServeJSON()​}​

接下来,我们需要新注册一个路由,修改router.go文件:

func init() {    beego.Router("/", &controllers.MainController{})    beego.Router("/register", &controllers.RegisterController{})}

然后我们创建一个Post()方法,用于处理post的请求:

​//处理注册func (this *RegisterController) Post() {    //获取表单信息    username := this.GetString("username")    password := this.GetString("password")    repassword := this.GetString("repassword")    fmt.Println(username, password, repassword)​    //注册之前先判断该用户名是否已经被注册,如果已经注册,返回错误    id := models.QueryUserWithUsername(username)    fmt.Println("id:",id)    if id > 0 {        this.Data["json"] = map[string]interface{}{"code":0,"message":"用户名已经存在"}        this.ServeJSON()        return    }​    //注册用户名和密码    //存储的密码是md5后的数据,那么在登录的验证的时候,也是需要将用户的密码md5之后和数据库里面的密码进行判断    password = utils.MD5(password)    fmt.Println("md5后:",password)​    user := models.User{0,username,password,0,time.Now().Unix()}    _,err :=models.InsertUser(user)    if err != nil{        this.Data["json"] = map[string]interface{}{"code":0,"message":"注册失败"}    }else{        this.Data["json"] = map[string]interface{}{"code":1,"message":"注册成功"}    }    this.ServeJSON()}

思路就是先接收表单信息,然后判断数据库中是否已经存在了该用户名,如果已经存在,那么无法进行注册,我们可以通过json返回信息:用户名已经存在。

否则再进行注册,出于对密码安全的考虑,我们可以在数据库中存储密码的md5加密数据。

所以在工具包中,再添加一个工具类:myUtils.go

package utils​import (    "fmt"    "crypto/md5")​//传入的数据不一样,那么MD5后的32位长度的数据肯定会不一样func MD5(str string) string{    md5str:=fmt.Sprintf("%x",md5.Sum([]byte(str)))    return md5str}​

2.3 运行

我们打开终端,进入项目所在的目录,执行命令:

bee run

项目启动后,监听在8080端口上。

并且执行了InitMysql()方法,初始化数据库,我们打开数据库进行刷新,已经创建好了一张数据表user:

打开浏览器,输入以下网址:http://localhost:8080/register ,然后输入用户名和密码进行注册。

此处,大家可以反复的试验,比如用户名长度不够,重复密码不一致,相同用户名等。

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

  1. 【kratos入门实战教程】2-实现注册登陆业务

    1.系列目录 [kratos入门实战教程]0-商城项目介绍 [kratos入门实战教程]1-kratos项目搭建和开发环境配置 [kratos入门实战教程]2-实现注册登陆业务 2.概览 通过本篇文章 ...

  2. 魔方APP项目-01-移动端开发相关概念、移动端自适配、元信息(meta)、开发准备、移动端项目搭建(模拟器调试)、APICloud(APICloud 前端框架,获取服务端API接口)

    一.移动端开发相关概念 1.APP类型 ①.Native APP Native APP又称原生APP,就是我们平时说的手机应用软件. 原生APP 是针对IOS.Android.Windows等不同的手 ...

  3. Java开发全终端实战租房项目

    课程介绍:        本课程采用SOA架构思想进行设计,基于目前主流后端技术框架SpringBoot.SpringMVC.Mybaits.Dubbo等来实现一个完整的租房项目--好客租房.好客租房 ...

  4. php ci框架开发手册下载,php敏捷开发codeigniter框架-CodeIgniter教程(中文手册)pdf格式免费完整版-东坡下载...

    这既是一份CodeIgniter教程,也是一份不可多得的CodeIgniter中文手册,更具体一点来说,它其实是<php敏捷开发codeigniter框架>,如果你需要一份这样的codei ...

  5. js模板字符串自定义类名_【Vue.js 入门到实战教程】07Vue 组件注册 | 基本使用和组件嵌套...

    来源 | https://xueyuanjun.com/post/21929除了前面介绍的基本语法之外,Vue.js 还支持通过组件构建复杂的功能模块,组件可以称得上是 Vue.js 的灵魂,是 Vu ...

  6. 基于Django框架的sysinfo项目搭建---系统信息监控(主机名,内核版本等)

    目录 主机信息监控 项目搭建 基础框架构建 首页系统信息展示完善 主机信息监控 项目搭建 详情见前篇博客 创建子应用host并且设置本地化 数据库表的创建和超级用户的创建 git管理项目(requir ...

  7. Symfony 框架实战教程——第一天:创建项目(转)

    这个系列的实战博客真是太有用了,很多例子自己调试也是通的,不同于很多网上不同的实战例子...附上原文地址  https://www.chrisyue.com/symfony-in-action-day ...

  8. apicloud开发混合app实战二手车项目

    2019独角兽企业重金招聘Python工程师标准>>> html5本地页面可以打包成app的技术越来越成熟,发展出很多开发方式,例如现在的vuejs 框架,配合比较流行的bootst ...

  9. ssm当用户登录成功显示用户名_从零到企业级SSM电商项目实战教程(十八)用户登录功能开发...

    用户模块功能介绍 1.登录 2.用户名验证 3.注册 4.忘记密码 5.提交问题答案 6.重置密码 7.获取用户信息 8.更新用户信息 9.退出登录 学习目标 1.理解横向越权.纵向越权安全漏洞 2. ...

最新文章

  1. It appears as though you do not have permission to view information ...
  2. 几种常见的攻击方式扫盲(一)——NTP反射放大
  3. windows boot files
  4. tableau可视化数据分析60讲(四)-tableau数据源操作数据提取
  5. 二叉树的先序/中序/后序/层次遍历
  6. vba 单元格 一系例操作
  7. 给指定的某个commit号加tag并推送
  8. linux6.5怎样安装vim,在Centos 6.5下成功安装和配置了vim7.4
  9. configureWebpack与chainWebpack
  10. npm报错,安装不上依赖,npm代理报错
  11. 乌龟吃鱼类 -python
  12. React的this.props.children
  13. 【TSP】基于matlab hopfield神经网络求解旅行商问题【含Matlab源码 408期】
  14. 《成语接龙》之成语表
  15. 如何在arcgis中制作土地利用转移矩阵
  16. 用latex画化学结构式
  17. python selenium清除缓存_SeleniumPython:无法清除chrome浏览器缓存
  18. 小学期云效能训练营-Day04
  19. 云计算技术与应用赛项赛题库
  20. xshell免费版安装

热门文章

  1. 探访联通总部,展望美好前景
  2. 【2021最新版】Spring Cloud面试题总结(35道题含答案解析)
  3. npm 卸载及安装流程
  4. 【深度学习】使用d2l包和相关环境配置的一些血泪心得
  5. android截屏代码实现方法
  6. linux硬盘盘符和槽位,磁盘槽位和盘符绑定方案
  7. SRA到fastq格式的批量转换
  8. 不同矫正批次效应方法的比较
  9. 正则表达式入门-findall()函数
  10. PaddlePaddle预训练模型大合集,还有官方使用说明书