16個のファイルの変更、277行の追加、69行の削除
@ -1,3 +1,8 @@ |
|||||
appname = beeblog |
appname = beeblog |
||||
httpport = 8082 |
httpport = 8082 |
||||
runmode = dev |
runmode = dev |
||||
|
|
||||
|
EnableGzip = true |
||||
|
EnableDocs = true |
||||
|
|
||||
|
host = aiprose.com |
||||
|
@ -1,15 +1,127 @@ |
|||||
package controllers |
package controllers |
||||
|
|
||||
import "github.com/astaxie/beego" |
import ( |
||||
|
"github.com/astaxie/beego" |
||||
|
"beeblog/service" |
||||
|
"beeblog/models" |
||||
|
"strings" |
||||
|
"crypto/md5" |
||||
|
"time" |
||||
|
"strconv" |
||||
|
"encoding/hex" |
||||
|
) |
||||
|
|
||||
type UserController struct { |
type UserController struct { |
||||
beego.Controller |
beego.Controller |
||||
} |
} |
||||
|
|
||||
func (u *UserController) LoginPage() { |
func (u *UserController) LoginPage() { |
||||
|
//o := orm.NewOrm()
|
||||
|
//
|
||||
|
//category := &models.Category{Title: "slene", Views: 5, TopicCount: 0}
|
||||
|
//
|
||||
|
//id,err := o.Insert(category)
|
||||
|
//fmt.Printf("ID: %d, ERR: %v\n", id, err)
|
||||
|
//
|
||||
|
//category.Title = "nelson"
|
||||
|
//num, err := o.Update(&category)
|
||||
|
//fmt.Printf("NUM: %d, ERR: %v\n", num, err)
|
||||
|
//
|
||||
|
//c := &models.Category{Id:1}
|
||||
|
//err := o.Read(c)
|
||||
|
//fmt.Printf("ERR: %v\n", err)
|
||||
|
//fmt.Println(c.Title)
|
||||
|
////c.Title = "nelson"
|
||||
|
////num, err := o.Update(c)
|
||||
|
////fmt.Printf("NUM: %d, ERR: %v\n", num, err)
|
||||
|
//qs := o.QueryTable(&models.Category{})
|
||||
|
//var tests []*models.Category
|
||||
|
//qs.Filter("Title","slene")
|
||||
|
//qs.All(&tests)
|
||||
|
//
|
||||
|
//for i:=0; i<len(tests) ; i++ {
|
||||
|
// fmt.Println(tests[i].Title,tests[i].Id)
|
||||
|
//}
|
||||
|
//fmt.Println(len(tests))
|
||||
|
//num, err = o.Delete(&u)
|
||||
|
//fmt.Printf("NUM: %d, ERR: %v\n", num, err)
|
||||
|
|
||||
u.Ctx.WriteString("login page") |
u.Ctx.WriteString("login page") |
||||
} |
} |
||||
|
|
||||
func (u *UserController) Login() { |
func (this *UserController) Login() { |
||||
u.Ctx.WriteString("login method") |
username := this.GetString("username") |
||||
} |
userpwd := this.GetString("userpwd") |
||||
|
if username == "" { |
||||
|
this.Data["json"] = models.ReurnError("用户名为空") |
||||
|
this.ServeJSON() |
||||
|
} |
||||
|
if len(username) < 4 { |
||||
|
this.Data["json"] = models.ReurnError("用户名最低4位") |
||||
|
this.ServeJSON() |
||||
|
} |
||||
|
if userpwd == "" { |
||||
|
this.Data["json"] = models.ReurnError("密码为空") |
||||
|
this.ServeJSON() |
||||
|
} |
||||
|
if len(userpwd) < 6 { |
||||
|
this.Data["json"] = models.ReurnError("密码最低6位") |
||||
|
this.ServeJSON() |
||||
|
} |
||||
|
user, error := service.FindByUserName(username) |
||||
|
if error == nil && user != nil { |
||||
|
h := md5.New() |
||||
|
h.Write([]byte(userpwd + user.Salt)) |
||||
|
userpwd = hex.EncodeToString(h.Sum(nil)) |
||||
|
if userpwd == user.UserPwd { |
||||
|
this.Data["json"] = models.ReurnSuccess("") |
||||
|
} else { |
||||
|
this.Data["json"] = models.ReurnError("用户名或密码错误") |
||||
|
} |
||||
|
} else { |
||||
|
this.Data["json"] = models.ReurnError("用户名不存在") |
||||
|
} |
||||
|
this.ServeJSON() |
||||
|
} |
||||
|
|
||||
|
func (this *UserController) Regist() { |
||||
|
username := this.GetString("username") |
||||
|
userpwd := this.GetString("userpwd") |
||||
|
username = strings.Replace(username, " ", "", -1) |
||||
|
userpwd = strings.Replace(userpwd, " ", "", -1) |
||||
|
if username == "" { |
||||
|
this.Data["json"] = models.ReurnError("用户名为空") |
||||
|
this.ServeJSON() |
||||
|
} |
||||
|
if len(username) < 4 { |
||||
|
this.Data["json"] = models.ReurnError("用户名最低4位") |
||||
|
this.ServeJSON() |
||||
|
} |
||||
|
if userpwd == "" { |
||||
|
this.Data["json"] = models.ReurnError("密码为空") |
||||
|
this.ServeJSON() |
||||
|
} |
||||
|
if len(userpwd) < 6 { |
||||
|
this.Data["json"] = models.ReurnError("密码最低6位") |
||||
|
this.ServeJSON() |
||||
|
} |
||||
|
user, _ := service.FindByUserName(username) |
||||
|
if user != nil { |
||||
|
this.Data["json"] = models.ReurnError("用户已经存在") |
||||
|
this.ServeJSON() |
||||
|
} |
||||
|
h := md5.New() |
||||
|
h.Write([]byte(strconv.FormatInt(time.Now().Unix(), 10) + beego.AppConfig.String("host"))) |
||||
|
salt := hex.EncodeToString(h.Sum(nil)) |
||||
|
h = md5.New() |
||||
|
h.Write([]byte(userpwd + salt)) |
||||
|
userpwd = hex.EncodeToString(h.Sum(nil)) |
||||
|
user = &models.User{UserName: username, UserPwd: userpwd, Salt: salt} |
||||
|
err := service.SaveUser(user) |
||||
|
if err == nil { |
||||
|
this.Data["json"] = user |
||||
|
} else { |
||||
|
this.Data["json"] = models.ReurnError("注册失败") |
||||
|
} |
||||
|
this.ServeJSON() |
||||
|
} |
||||
|
@ -0,0 +1,11 @@ |
|||||
|
package models |
||||
|
|
||||
|
import "time" |
||||
|
|
||||
|
type Attachment struct { |
||||
|
Id int64 |
||||
|
Name string |
||||
|
Alias string |
||||
|
Path string `orm:"index"` |
||||
|
UploadTime time.Time `orm:"datetime"` |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
package models |
||||
|
|
||||
|
import "time" |
||||
|
|
||||
|
type Blog struct { |
||||
|
Id int64 |
||||
|
UserId int64 |
||||
|
Title string |
||||
|
BlogValue string `orm:"size(5000)"` |
||||
|
BlogHtml string `orm:"size(5000)"` |
||||
|
Ctime time.Time `orm:"datetime"` |
||||
|
Utime time.Time `orm:"datetime"` |
||||
|
Browses int64 `orm:"datetime"` |
||||
|
Top int |
||||
|
Hot int |
||||
|
Ttime time.Time `orm:"datetime"` |
||||
|
Htime time.Time `orm:"datetime"` |
||||
|
Delflag int |
||||
|
CategoryId int64 |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
package models |
||||
|
|
||||
|
import "time" |
||||
|
|
||||
|
type Comment struct { |
||||
|
Id int64 |
||||
|
CuserId int64 |
||||
|
BuserId int64 |
||||
|
BlogId int64 |
||||
|
Ctime time.Time `orm:"datetime"` |
||||
|
Pid int64 |
||||
|
ComVal string `orm:"size(2000)"` |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
package models |
||||
|
|
||||
|
import "time" |
||||
|
|
||||
|
type Like struct { |
||||
|
Id int64 |
||||
|
UserId int64 |
||||
|
BlogId int64 |
||||
|
Ltime time.Time `orm:"datetime"` |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
package models |
||||
|
|
||||
|
type Note struct { |
||||
|
Id int64 |
||||
|
UserId int64 |
||||
|
Title string |
||||
|
NoteVal string `orm:"size(3500)"` |
||||
|
NoteHtml string `orm:"size(5000)"` |
||||
|
Pid int64 |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
package models |
||||
|
|
||||
|
type Error struct { |
||||
|
Status byte |
||||
|
Msg string |
||||
|
} |
||||
|
|
||||
|
func ReurnError(msg string) *Error { |
||||
|
return &Error{Status: byte(1), Msg: msg} |
||||
|
} |
||||
|
|
||||
|
type Success struct { |
||||
|
Status byte |
||||
|
Msg string |
||||
|
} |
||||
|
|
||||
|
func ReurnSuccess(msg string) *Error { |
||||
|
if msg == "" { |
||||
|
msg = "success" |
||||
|
} |
||||
|
return &Error{Status: byte(0), Msg: msg} |
||||
|
} |
@ -0,0 +1,19 @@ |
|||||
|
package models |
||||
|
|
||||
|
import "time" |
||||
|
|
||||
|
type User struct { |
||||
|
Id int64 |
||||
|
UserName string `orm:"unique"` |
||||
|
UserPwd string |
||||
|
Salt string |
||||
|
Headimg string |
||||
|
Birthday time.Time `orm:"null;type(date)"` |
||||
|
Email string |
||||
|
Mobile string |
||||
|
QQ string |
||||
|
HomeUrl string |
||||
|
Sex int |
||||
|
DescInfo string |
||||
|
Ctime time.Time `orm:"auto_now_add;type(datetime)"` |
||||
|
} |
@ -1,8 +0,0 @@ |
|||||
package models |
|
||||
|
|
||||
type Category struct { |
|
||||
Id int64 |
|
||||
Title string |
|
||||
Views int64 `orm:"index"` |
|
||||
TopicCount int64 |
|
||||
} |
|
@ -1,15 +0,0 @@ |
|||||
package models |
|
||||
|
|
||||
import "time" |
|
||||
|
|
||||
type Topic struct { |
|
||||
Id int64 |
|
||||
Uid int64 |
|
||||
Title string |
|
||||
Content string `orm:"size(5000)"` |
|
||||
Attachment string |
|
||||
Created time.Time `orm:"index"` |
|
||||
ViewCount int64 `orm:"index"` |
|
||||
Author string |
|
||||
ReplayCount int64 |
|
||||
} |
|
@ -0,0 +1,12 @@ |
|||||
|
package routers |
||||
|
|
||||
|
import ( |
||||
|
"github.com/astaxie/beego" |
||||
|
"beeblog/controllers" |
||||
|
) |
||||
|
|
||||
|
func init() { |
||||
|
beego.Router("/login", &controllers.UserController{}, "get:LoginPage") |
||||
|
beego.Router("/login", &controllers.UserController{}, "post:Login") |
||||
|
beego.Router("/regist", &controllers.UserController{}, "post:Regist") |
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
package service |
||||
|
|
||||
|
import ( |
||||
|
"github.com/astaxie/beego/orm" |
||||
|
"beeblog/models" |
||||
|
) |
||||
|
|
||||
|
type UserService struct { |
||||
|
} |
||||
|
|
||||
|
func FindByUserName(username string) (*models.User, error) { |
||||
|
o := orm.NewOrm() |
||||
|
qs := o.QueryTable(&models.User{}) |
||||
|
var users []*models.User |
||||
|
_, err := qs.Filter("UserName", username).All(&users) |
||||
|
if err != nil { |
||||
|
return nil, err |
||||
|
} |
||||
|
if len(users) != 0 { |
||||
|
return users[0], nil |
||||
|
} |
||||
|
return nil, nil |
||||
|
} |
||||
|
|
||||
|
func SaveUser(user *models.User) error { |
||||
|
o := orm.NewOrm() |
||||
|
id, eror := o.Insert(user) |
||||
|
if eror != nil { |
||||
|
return eror |
||||
|
} else { |
||||
|
user.Id = id |
||||
|
o.Commit() |
||||
|
} |
||||
|
return nil |
||||
|
} |
@ -1,39 +0,0 @@ |
|||||
package test |
|
||||
|
|
||||
import ( |
|
||||
"net/http" |
|
||||
"net/http/httptest" |
|
||||
"testing" |
|
||||
"runtime" |
|
||||
"path/filepath" |
|
||||
_ "beeblog/routers" |
|
||||
|
|
||||
"github.com/astaxie/beego" |
|
||||
. "github.com/smartystreets/goconvey/convey" |
|
||||
) |
|
||||
|
|
||||
func init() { |
|
||||
_, file, _, _ := runtime.Caller(1) |
|
||||
apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, ".." + string(filepath.Separator)))) |
|
||||
beego.TestBeegoInit(apppath) |
|
||||
} |
|
||||
|
|
||||
|
|
||||
// TestBeego is a sample to run an endpoint test
|
|
||||
func TestBeego(t *testing.T) { |
|
||||
r, _ := http.NewRequest("GET", "/", nil) |
|
||||
w := httptest.NewRecorder() |
|
||||
beego.BeeApp.Handlers.ServeHTTP(w, r) |
|
||||
|
|
||||
beego.Trace("testing", "TestBeego", "Code[%d]\n%s", w.Code, w.Body.String()) |
|
||||
|
|
||||
Convey("Subject: Test Station Endpoint\n", t, func() { |
|
||||
Convey("Status Code Should Be 200", func() { |
|
||||
So(w.Code, ShouldEqual, 200) |
|
||||
}) |
|
||||
Convey("The Result Should Not Be Empty", func() { |
|
||||
So(w.Body.Len(), ShouldBeGreaterThan, 0) |
|
||||
}) |
|
||||
}) |
|
||||
} |
|
||||
|
|
読み込み中…
新しい課題から参照