1. 程式人生 > >golang+beego+ext.js+mysql學習第一課

golang+beego+ext.js+mysql學習第一課

為什麼前端用ext.js呢,因為主要學習目的是做後臺管理類專案,目前此類專案都是單頁面應用,比較流行的是VUE.JS,這東西我折騰了4天,愣是環境都沒配置好,因為它需要npm各種支援庫什麼的,總是報錯。

後來才開始研究ext.js,因為我們公司有個做java的,對這東西有點熟悉,而且用它做過專案,所以,當我有問題的時候就能問下,當然,在整個開發過程中,我也踩了n多坑,滿眼淚啊。ext感覺不錯,不用學H5,CSS哈哈,只要js即可

使用beego和ext.js自動建立新專案,然後把ext.js建立的專案目錄拷貝到beego建立的專案目錄的static目錄下


此時,通過

http://127.0.0.1:8080/static/ext/index.html

可以正常開啟以下頁面

至此,開發環境準備完畢,開始進入開發階段。

先在此處新建 Userlist.js檔案,該檔案用來定義列表佈局


檔案具體內容如下

Ext.define('ext.view.user.UserList', {
    extend: 'Ext.grid.Panel',
xtype: 'userlist',
//應用自定義樣式 sass/src/panel/Panel.scss
ui : 'highlight',
frame : 'true',
requires: [
        'ext.store.User'
],
title: '使用者管理',
store: {
        type
: 'user' }, columns: [ { text: '姓名', dataIndex: 'Id' }, { text: '郵箱', dataIndex: 'Name', flex: 1 }, { text: '電話', dataIndex: 'Phone', flex: 1 } ], listeners: { select: 'onItemSelected' } });
這裡要注意的是,列名必須和後端定義的一致,其中
ext.store.User
就是我們馬上要建立的檔案。在如下位置建立檔案


該檔案負責和後端溝通,請求並接收資料,檔案內容如下

Ext.define('ext.store.User', {
    extend: 'Ext.data.Store',
storeId:'userStore',
alias: 'store.user',
autoLoad:true,
//pageSize : 10,
fields: [
        'Id','Name','Phone'
],
proxy: {
        type: 'ajax',
url : 'http://127.0.0.1:8080/user',
actionMethods : {
            read: 'POST' // Store設定請求的方法,與Ajax請求有區別
},
reader: {
            type: 'json',
rootProperty: 'data'// 資料(不配置的話無法接收資料),返回的key為data
            //totalProperty : 'total'// 記錄數(不配置的話無法翻頁),返回的key為totalRecord
}
    }
})
然後,修改main.js檔案,使包含
'ext.view.user.UserList',
並且修改
items: [{
    title: '首頁',
iconCls: 'fa-home',
// The following grid shares a store with the classic version's grid as well!
items: [{
        xtype: 'mainlist'
}]
}, {
    title: '使用者管理',
iconCls: 'fa-user',
items: [{
        xtype: 'userlist'
}]
}, {
就是為了讓使用者管理這部分,對應我們剛才定義的userlist介面佈局

至此,前段ext.js部分處理完成,下面開始處理後端beego部分內容

先修改app.conf檔案,設定資料庫連線相關資訊

mysqluser = "root"
mysqlpass = "123456"
mysqlurls = "127.0.0.1"
mysqldb = "blog"
mysqlport = "3306"
然後修改 route.go檔案,增加路由請求處理,
beego.Router("/user", &controllers.UserController{})
這裡的地址,要和前端USER.JS裡的對應。

然後增加控制層檔案,controllers下新增user.go檔案,內容如下

package controllers
import (
       "github.com/astaxie/beego"
."quickstart/models"
       "fmt"
)
type UserController struct {
       beego.Controller
}

func (this *UserController) Post() {
       page, _ := this.GetInt("page")
       limit,_ := this.GetInt("limit")
       status,_ := this.GetInt("status")
       srt := this.GetString("status")
       println("page",page)
       println("limit",limit)
       println("status",status)
       println("status",srt)
       _, _, alb := ListUser()

       fmt.Println("alb",alb)

       this.Data["json"] = map[string]interface{}{"data": alb}
       this.ServeJSON()
}
對了這裡有個問題,我的編輯器介面中GetInet等函式名都是紅色,但是編譯的時候不報錯,我用的是gogland,就是下面這樣


誰知道這是什麼情況,告訴我下。

這個檔案就是為了取出引數,然後利用ListUser來查詢資料,返回值是alb

但是返回給前端ext的時候,還必須再次封裝,前面加data,因為前端接收資料是這樣

reader: {
    type: 'json',
rootProperty: 'data'// 資料(不配置的話無法接收資料),返回的key為data
    //totalProperty : 'total'// 記錄數(不配置的話無法翻頁),返回的key為totalRecord
}
如果不封裝,前端就接收不到,我測試了多種封裝辦法,最後才發現這樣是正確的,一個大坑被踩平。

在這裡,我還發現個不理解的問題,beego的controllers層,似乎最後只能用

this.ServeJSON()
this.TplName = "album.tpl"
等兩種方式返回資料給前端,好像不用用 return XXXX 這種方式返回資料。

然後在 model目錄裡建立 user.go檔案,內容如下

package models

import (
       //"strconv"
       //"time"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
       "fmt"
)

type Usertest struct {
       Id       int
Name    string
Phone  string
}

func (this *Usertest) TableName() string {
       return "testuser"
}

func init() {
       orm.RegisterModel(new(Usertest))
}

func ListUser() (num int64, err error, alb []Usertest) {
       o := orm.NewOrm()
       var maps []orm.Params
       o.Raw("select id,name,phone from testuser").Values(&maps)
       fmt.Println(maps)

       qs := o.QueryTable("testuser")
       cond := orm.NewCondition()
       qs = qs.SetCond(cond)

       var albums []Usertest
       num, err1 := qs.Limit(100, 0).All(&albums)
       return num, err1, albums
}
這個檔案用來從資料庫查詢並返回資料,這裡有個坑
qs := o.QueryTable("testuser")
這個表名,必須和
func (this *Usertest) TableName() string {
       return "testuser"
}
這裡相同才行,否則一直提示找不到表。

然後還需要2個數據庫初始化的檔案,先在專案下,建立initial資料夾,然後建立init.go,內容如下

package initial

func init() {
       InitSql()
}
然後建立 sql.go
package initial

import (
       "fmt"
       "github.com/astaxie/beego"
       "github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)

func InitSql() {
       //資料庫連線初始化
user := beego.AppConfig.String("mysqluser")
       passwd := beego.AppConfig.String("mysqlpass")
       host := beego.AppConfig.String("mysqlurls")
       port, err := beego.AppConfig.Int("mysqlport")
       dbname := beego.AppConfig.String("mysqldb")
       if nil != err {
              port = 3306
}
       orm.Debug = true
orm.RegisterDriver("mysql", orm.DRMySQL)
       //orm.RegisterDataBase("default", "mysql", "root:@/blog?charset=utf8", 30)
orm.RegisterDataBase("default", "mysql", fmt.Sprintf("%s:%[email protected](%s:%d)/%s?charset=utf8", user, passwd, host, port, dbname))

}

這裡就是連線資料庫了

然後修改main.go

使包含資料庫初始化連線

_"quickstart/initial"
下面就是建立資料庫了,建一個blog的庫,增加以下表

CREATE TABLE `testuser` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  `phone` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

現在終於完成了,看看效果吧


我這樣從c/s結構轉b/s結構的開發人員,感覺這個b/s結構的層次好複雜,前端就需要3層,後端同樣是3層,完成一個功能,至少要修改6個檔案,也許等以後熟悉了,就會習慣了吧。

相關推薦

golang+beego+ext.js+mysql學習第一

為什麼前端用ext.js呢,因為主要學習目的是做後臺管理類專案,目前此類專案都是單頁面應用,比較流行的是VUE.JS,這東西我折騰了4天,愣是環境都沒配置好,因為它需要npm各種支援庫什麼的,總是報錯。 後來才開始研究ext.js,因為我們公司有個做java的,對這東西有點

golang語言學習第一:如何定義變數,筆記及回顧

第一課主要講go語言如何定義變數 需要注意的是:go語言定義了變數一定要使用,不使用會提示出錯。這個機制比較好。 第一:完整變數定義法: var a int =3    注意:go語言跟其他語言定義變數不太一樣,型別放後面,符合人們思維的習慣。 第二種:var省略型別法: var a

node.js學習第一

1,Node.js的JavaScript的與的區別: (1)的Node.js:一個可以執行的Javascript的平臺,=的NodeJS JavaScript的執行環境+ JavaScript的擴充套件的功能,JS解析器為googleV8引擎 (2)JS:JS執行在瀏覽器

C語言學習第一

學習至於C語言,可謂曾經朋友,當下陌路。本科時選擇通信工程專業,開始便接觸學習了C語言。只是當時貪玩,泛泛而讀,應付考試,從不走心。徒心塞了今天讀研的我。發現人在江湖,欠的終歸要還,所以,勵誌的我,準備從零學起。以此微博日日更新為證,監督自我學習C語言。 今天學的第一個程序。英寸到厘米的轉換。1英寸=2.54

Python學習第一

駝峰 重復 not com ron tin 不可變 鎖定 邏輯運算 課程筆記: #變量 age=18 #定義一個變量,會有三個特征:id(內存地址),type(類型),value(地址) print(id(age),type(age),age)

學習第一

新聞 一課 bsp 就業 簡單 style 智能 新的 spa 今天簡單了解了一下IT行業的就業前景以及實際涉及的方面。我來到漢企培訓的初衷是:一、未來是大數據與人工智能的時代,現在國家很重視這方面的投入,在新聞裏看到上海新建的無人港口,被那些最前沿的技術所深深震撼

Asp.net MVC4高級編程學習筆記-視圖學習第一20171009

強類型 編寫 ret namespace i++ 智能 權限 eba 轉換成 首先解釋下:本文只是對Asp.net MVC4高級編程這本書學習記錄的學習筆記,書本內容感覺挺簡單的,但學習容易忘記,因此在邊看的同時邊作下了筆記,可能其它朋友看的話沒有情境和邏輯順序還請諒解

電腦小白學習第一---IP地址查詢和設置

信息 獲得 一個 mage ges 網絡連接 連接 回車 學習 IP地址網絡的身.份.證信息 (唯一性,不可重復,同一個區域不可以設置相同的IP地址)IP分為分為IPv4和IPv6目前我們一般使用IPv4設置方法:電腦右下角網絡連接圖標右擊--->打開網絡和共享中心-

Mysql學習第一

建立連接 查詢 管理員 sel 數據一致性 ini文件 現在 mysql卸載 del 1、數據倉庫.就與我們之前學過的純文本,properties,XML這些技術一樣.用來保存數據.並提供對數據進行增刪改查的操作.我們以後做項目時, 項目中的數據都是保存在數據庫中的. 2、

Andrew機器學習第一

ont 一個 批梯度下降 參考 span mage img detail nbsp 批梯度下降算法: 訓練樣本為一個時:更新Θi 讓代價函數最小,利用沿梯度下降方向函數會變得越來越小。這個函數是代價函數J關於(Θi )的。這裏並沒有在討論x,y。 關於

C++學習第一 初學者易犯的錯誤

初學C++初學者容易犯C語言的一些錯誤:C語言是面向過程的設計,而C++是面向物件的設計 例如,我們寫一個求圓的面積的程式碼: 使用C語言的方法(即面向物件的方法)是: //求圓的面積 //用面向過程的方法求解圓形的面積 // << >> 不會用: 標準輸入cin

Es學習第一,瞭解基本功能和概念

    Elasticsearch作為這幾年最流行的搜尋引擎,越來越多的網際網路企業都在採用它;作為java開發者來說,如果想進一步提高自己能力,同時也為了能夠在實際工作中遇到搜尋、儲存問題多一個解決方案,學習ES絕對大家工作、學習乃至找工作都是一個極大的好處。下面我就結合自己學習ES的一

深度學習第一 線性迴歸

最近在學習李沐的Mxnet/Gluon深度學習的線性迴歸部分,線性迴歸是很基本的一種監督學習,分類問題。 以前學習完一遍吳恩達的《machine learning》,並把《機器學習實戰》裡面的主要程式碼都實現一遍,現在有點忘記了,正好開始深度學習,開始線性迴歸查缺補漏,MXnet框架其實比較小眾

R語言學習-第一-資料蒐集

R語言是一門快速發展的開源軟體,是SAS、STATA和SPSS這類商業軟體的競爭對手。 就業市場對R語言的需求正在迅速上升,微軟等公司也同時承諾將致力讓R語言成為資料科學通用語言。 看看由Revolution Analytics製作的90秒視訊(https://www.youtube.c

跟著學之網路學習第一(筆記)

一 WAN:廣域網 LAN: 區域網 MAN: 都會網路 WLAN:無線區域網 扁平化:小型,不易擴張 層次化:核心層,匯聚層,接入層 二 IP網路三大網:接入網 都會網路 廣域網 都會網路包含核心層 匯聚層 接入層 傳輸介質:兩個終端,用一條能

深度學習第一入門

近幾年深度學習的概念非常火,我們很幸運趕上並見證了這一波大潮的興起。記得2012年之前提及深度學習,大部分人並不熟悉,而之後一段時間裡,也有些人仍舊持懷疑的態度,覺得這一波浪潮或許與之前sparse coding類似,或許能持續火個兩三年,但終究要被某個新技術新

Python學習第一---基礎語法

1、python基礎輸入輸出及註釋 print('今天我開始學習Python了,真的好開心啊!')#第一個語句,#號代表註釋行,不會被執行,多行註釋用''' a=input("輸入一個值:")#從控制檯輸出資料 print(a)#輸出從外界獲取的值 pri

2018/10/11JavaScript學習第一

教學內容 什麼是程式語言? 軟體程式設計的基本思路,流程控制和函式的概念; JavaScript 介紹,理解 JavaScript 的書寫規範和簡單的程式程式碼。 課程重點 JavaScript 和 HTML 的關係; 如何執行 JavaScript 程

Python學習第一課後題

第一課 0. Python 是什麼型別的語言? Python是指令碼語言 指令碼語言(Scripting language)是電腦程式語言,因此也能讓開發者藉以編寫出讓電腦聽命行事的程式。以簡單的方式快速完成某些複雜的事情通常是創造指令碼語言的重要原則,基於這項

藉助node.js + mysql 學習基礎ajax~

很多小白不知道ajax怎麼學,所以就弄了個node後臺模擬下基本的ajax請求。 環境要求是安裝node~ 先上linkMysql.js var mysql = require('mysql') var connection = mysql.createConnection({ host: 'lo