Skip to content

no2key/her

 
 

Repository files navigation

her

a web framework for golang

介绍

用 Go 实现的一个简单的 MVC 模式框架,目前支持:

  • 路由/RESTFUL(route)
  • 控制器(handler)
  • 视图(templates)
  • 表单(form)
  • 静态文件(static)
  • 数据库(database)

安装

请确保Go环境已经安装,如未安装请参考 Go 环境安装,请安装最新版。

go get github.com/go-code/her

快速使用

package main

import (
    "github.com/go-code/her"
)

func main() {
    app := her.NewApplication()
    app.Route.Handle("/", func() string {
        return "hello world!"
    })
    app.Start()
}

启动程序访问8080端口,默认端口为8080

her application

app := her.NewApplication()
// app.Route and app.Database and app.Template
app.Start()

Config

app := her.NewApplication(map[string]interface{}{
        "TemplatePath": "templates",
        "Address":      "0.0.0.0",
        "XSRFCookies":  true,
        "CookieSecret": "book_secert",
        "Port":         8080,
        "Debug":        true,
    })

Route (mux)

app.Route.Handle("/", func() {
// handle code
}) // get
app.Route.Handle("/", func() {
// handle code
}).Methods("POST") //post

app.Route.Handle("/{key}", func(key string) {
// handle code
})
app.Route.Handle("/{key}/{id:[0-9]+}", func(key string, id string) {
// handle code
})

Handler

app.Route.Handle("/", func() string {
    return "hello world!"
})

app.Route.Handle("/", func(ctx *her.Context) {
    ctx.WriteString("hello world!")
})

app.Route.Handle("/str/{val}", func(ctx *her.Context, val string) {
    ctx.WriteString("str: " + val)
})

app.Route.Handle("/int/{val}", func(ctx *her.Context, val int) {
    ctx.WriteString("int: " + strconv.Itoa(val))
})

app.Route.Handle("/par/{val}", func(ctx *her.Context) {
    ctx.WriteString("par: " + ctx.Params["val"])
})

Static file handler

app.Route.Handle("/static/{path:.*}", her.StaticFileHandler("static")) // static 为静态文件目录

Database

// import go-sqlite3
import _ "github.com/mattn/go-sqlite3"
// config
app.Database.Connection("sqlite", "sqlite3", "./book.s3db") // key, driver, data source
// use
DB = her.NewDB()
db := DB.Open("sqlite")
defer db.Close()
// sql code

Template FunMap

app.Template.FuncMap(map[string]interface{}{
    "text": func(text string) template.HTML {
        return template.HTML(text)
    },
})
// use
{{text "her"}}

Form and Validator

package form

import (
    "github.com/go-code/her"
)

// form field
type BookForm struct {
    Form     *her.Form
    UserName *her.TextField
    Content  *her.TextAreaField
}

// new form and field validetor
func NewBookForm(ctx *her.Context) *BookForm {
    form := &BookForm{}
    form.UserName = her.NewTextField("username", "用户名", "", her.Required{}, her.Length{Min: 3, Max: 10})
    form.Content = her.NewTextAreaField("content", "内容", "", her.Required{}, her.Length{Min: 1, Max: 200})

    form.Form = her.InitForm(ctx, form)
    return form
}
// use
form := form.NewBookForm(ctx)
tmpl := map[string]interface{}{}
tmpl["form"] = form
ctx.Render("create.html", tmpl)

// template
{{.form.UserName.Text}}
{{.form.UserName.Render `class="form-control"` `placeholder="用户名"`}}

{{.form.Content.Text}}
{{.form.Content.Render `class="form-control"` `placeholder="需要发布的内容"` `rows="5"`}}

{{.form.Form.ValidatorSummary}} // error msg
// validetor
if ctx.Request.Method == "POST" {
    if form.Form.Validate() {
        // form.UserName.Value() form field value
    }
}

参考、使用项目

开发成员

John, Monkey

LICENSE

Apache License, Version 2.0

About

a web framework for golang

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published