Beego项目组织结构

conf

conf:项目配置文件所在的目录,项目中有一些全局的配置都可以放在此目录下。默认的app.conf文件中默认指定了三个配置:

// 1)appname = BeegoDemo2: 指定项目名称。
// 2)httpport = 8080: 指定项目服务监听端口。
// 3)runmode = dev: 指定执行模式。
Controllers

该目录是存放控制器文件的目录,所谓控制器就是控制应用调用哪些业务逻辑,由controllers处理完http请求以后,并负责返回给前端调用者。

models

models层可以解释为实体层或者数据层,在models层中实现和用户和业务数据的处理,主要和数据库表相关的一些操作会在这一目录中实现,然后将执行后的结果数据返回给controller层。比如向数据库中插入新数据,删除数据库表数据,修改某一条数据,从数据库中查询业务数据等都是在models层实现。

routers

该层是路由层。所谓路由就是分发的意思,当前端浏览器进行一个http请求达到后台web项目时,必须要让程序能够根据浏览器的请求url进行不同的业务处理,从接收到前端请求到判断执行具体的业务逻辑的过程的工作,就由routers来实现。

static

在static目录下,存放的是web项目的静态资源文件,主要有:css文件,img,js,html这几类文件。html中会存放应用的静态页面文件。

views

views中存放的就是应用中存放html模版页面的目录。所谓模版,就是页面框架和布局是已经使用html写好了的,只需要在进行访问和展示时,将获取到的数据动态填充到页面中,能够提高渲染效率。因此,模版文件是非常常见的一种方式。

综上,这个整个的项目架构就是MVC的运行模式。常见的架构模式大家应该熟悉比如:MVC,MVP,MVVM等架构。这里我们采用MVC

路由设置

基础路由

Get请求就会对应到Get方法,Post就会对应到Post方法,Delete就会对应到Delete方法,Header方法就会对应Header方法。

package routers

import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/context"
) /**
* 基础路由
* beego框架提供了常见的http的请求类型方法的路由方案,比如: get,post,head,options,delete等方法
*/ func init() {
beego.Get("/get", func(context *context.Context) {
beego.Info("基础路由中的get请求")
context.Output.Body([]byte("基础路由中的get请求"))
}) beego.Get("/getUserInfo", func(context *context.Context) {
beego.Info("获取用户信息")
context.Output.Body([]byte("获取用户信息"))
}) beego.Post("/post", func(this *context.Context) {
beego.Info("基础路由中的post请求")
this.Output.Body([]byte("基础路由的post请求"))
})
}
固定路由

诸如以下此种代码形式:

// beego.Router("/",controller);

// Get请求就会对应到Get方法,Post就会对应到Post方法,Delete就会对应到Delete方法,Header方法就会对应Header方法。
正则路由

正则路由是指可以在进行固定路由的基础上,支持匹配一定格式的正则表达式。比如:id,:username,自定义正则,file的路径和后缀切换以及全匹配等操作。

自定义路由

上面两种路由都是默认的根据请求的类型,Get就执行Get方法,Post执行Post方法,比较局限。因为在开发的时候大部分都是使用固定匹配想要直接执行对应的逻辑控制方法,因此beego提供给我们了可以自定义的自定义路由配置。方式如下:

// beego.Router("/",&IndexController{},"")

Model层

在Web开发过程中,开发者操作数据,存储数据最常用的就是数据库操作,数据库操作是独立的一个模块,这个在后面具体的项目中实现。

View编写

在实际的开发过程中,要求大家需要掌握html,js语法以及简单的css语法要能看懂,能够时间简单的使用。更加复杂的前端页面或者静态页面,需要和前端开发人员进行对接。开发重心是在后台服务端,因此,只需要学会使用和调用调试即可。

静态文件的设置

在goweb项目中,上面说过是有一些静态资源文件的,如果用户要访问静态资源文件,我们应该也是能够访问的,这需要在我们的项目中进行静态资源设置。

设置方式为:

// beego.SetStaticPath("/down1","download1")
// 这里的download目录是指的非goweb项目的static目录下目录,而是开发者重新新建的另外的目录。

配置数据库

mysql数据库安装

请看我写的专门部署mysql博客

https://www.cnblogs.com/you-men/p/12838133.html

配置数据库驱动

数据库编程属于beego中的Models层,也称为ORM模块

在beego中,目前支持三种数据库驱动,分别是:

// MySQL: github.com/go-sql-driver/mysql
// PostgreSQL:github.com/lib/pq
// Sqlite3:github.com/mattn/go-sqlite3 go get github.com/go-sql-driver/mysql

beego中的ORM所具备的几个特性

// 1. 支持G语言的所有类型存储
// 2. CRUD操作简单
// 3. 自动Join关联表
// 4. 允许直接使用SQL查询

beego项目中使用mysql

导入对应的数据库驱动
import _ "github.com/go-sql-driver/mysql"
注册驱动,连接数据库
orm.RegisterDriver("mysql",orm.DRMySQL)
orm.RegisterDataBase(aliasName,driverName,dbConn)
连接数据库代码
package models

import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"BlogProject/MysqlDemo/util"
//切记:导入驱动包
_ "github.com/go-sql-driver/mysql"
) func init() { 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" err := orm.RegisterDataBase("default", driverName, dbConn)
if err != nil {
util.LogError("连接数据库出错")
return
}
util.LogInfo("连接数据库成功") }

02 . Beego框架结构组织,路由及项目初始化的更多相关文章

  1. Vben Admin 源码学习:项目初始化

    0x00 前言 Vue-Vben-Admin 是一个免费开源的中后台模版.使用了最新的vue3,vite2,TypeScript等主流技术开发,开箱即用的中后台前端解决方案考. 本系列本着学习参考的目 ...

  2. Vue+koa2开发一款全栈小程序(5.服务端环境搭建和项目初始化)

    1.微信公众平台小程序关联腾讯云 腾讯云的开发环境是给免费的一个后台,但是只能够用于开发,如果用于生产是需要花钱的,我们先用开发环境吧 1.用小程序开发邮箱账号登录微信公众平台 2.[设置]→[开发者 ...

  3. 使用wepy开发微信小程序商城第一篇:项目初始化

    使用wepy开发微信小程序商城 第一篇:项目初始化 前言: wepy小程序项目初始化的操作,官方文档看了好几遍,感觉写得不是很清楚. 这篇写得挺好的:小程序开发之wepy 1.初始化项目 (1)全局安 ...

  4. 前端Vue项目——初始化及导航栏

    一.项目初始化 创建webpack模板项目如下所示: MacBook-Pro:PycharmProjects hqs$ vue init webpack luffy_project ? Project ...

  5. vue前端项目初始化的步骤

    前端项目初始化的步骤 1. 安装vue脚手架 2.通过vue脚手架创建项目 可以直接    vue create  项目名 也可以 vue ui 3.配置vue路由 4.配置Element-ui 组件 ...

  6. 2016.02.01日,UdoOS系统项目正式开通了

    2016.02.01日,UdoOS系统项目正式开通了,源代码即将开放 Copyright (c) 2016

  7. zookeeper实现项目初始化缓存以及同步监听

    Spring-利用InitializingBean接口和zookeeper实现项目初始化缓存以及同步监听 1.先贴出几个需要用到的工具类 ZkClientUtils import com.ithzk. ...

  8. 02.02.03第3章 餐饮项目案例(Power BI商业智能分析)

    02.02.03第3章 餐饮项目案例 02.02.03.01餐饮数据理解与读入 00:06:12 02.02.03.02餐饮数据处理 00:29:57 处理生成的表为: 02.02.03.03餐饮数据 ...

  9. react-native 项目初始化

    react-native 项目初始化 搭建java,android,node环境 http://www.cnblogs.com/morang/p/react-native-java-build.htm ...

随机推荐

  1. maven测试配置是否成功

    测试maven 是否安装成功 win+r 输入 cmd 调出doc 输入 mvn -v maven安装完成测试报错 后来发现是java-home在path中配置缺少bin,如下图 这个是 java-h ...

  2. 《UNIX环境高级编程》(APUE) 笔记第十二章 - 线程控制

    12 - 线程控制 GitHub 地址 1. 线程限制 下图为与 线程操作 有关的一些 限制: 可以通过 sysconf 函数进行查询 . 2. 线程属性 可使用 pthread_attr_t 结构修 ...

  3. Zookeeper 序列化

    读完这篇文章你将会收获到 在 Zookeeper 源码项目中新建模块,使用 Jute 进行序列化和反序列化 修改 Jute 中的 buffer size 来序列化/反序列化大对象 序言 从 前面的文章 ...

  4. 在web开发中,为什么前端比后端更得到转行程序员的青睐?必看!

    1.Web开发分类与区别 人们通常将Web分为前端和后端,前端相关的职位有前端设计师(UI/UE),前端开发工程师,后端相关的有后端开发工程师. 2.技术栈区别 看各大招聘网站上,公司对前端开发工程师 ...

  5. Plink v0.1.0 发布——基于Flink的流处理平台

    Plink是一个基于Flink的流处理平台,旨在基于 [Apache Flink]封装构建上层平台. 提供常见的作业管理功能.如作业的创建,删除,编辑,更新,保存,启动,停止,重启,管理,多作业模板配 ...

  6. 重学 Java 设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 文无第一,武无第二 不同方向但同样努力的人,都有自身的价值和亮 ...

  7. 「状压DP」「暴力搜索」排列perm

    「状压DP」「暴力搜索」排列 题目描述: 题目描述 给一个数字串 s 和正整数 d, 统计 sss 有多少种不同的排列能被 d 整除(可以有前导 0).例如 123434 有 90 种排列能被 2 整 ...

  8. Linux系统中虚拟设备文件的各种实用用法

    大家好,我是良许. 大家知道,在 Linux 下,一切皆文件,对于设备文件也是如此.我们在工作的过程中,经常会看到 /dev/null 这个玩意,那它到底是什么呢? 专业地讲,/dev/null 是一 ...

  9. dva的简介

    dva的定义 dva 是基于现有应用架构 (redux + react-router + redux-saga 等)的一层轻量封装; redux 他是react当中的仓库,如果熟悉vue的话,他的功能 ...

  10. day31 反射,内置方法,元类

    目录 一.反射 1 什么是反射 2 如何实现反射 二.内置方法 1 什么是内置方法 2 为什么要用内置方法 3 如何使用内置方法 3.1 str 3.2 del 三.元类 1 什么是元类 2 clas ...