Skip to content
This repository has been archived by the owner on Oct 19, 2023. It is now read-only.

kwiscale/framework

Repository files navigation

kwiscale

Join the chat at https://gitter.im/kwiscale/framework Build Status Coverage Status Documentation Status GoDoc

Web Middleware for Golang

At this time, Kwiscale is at the very begining of developpement. But you can test and give'em some pull-request to improve it.

Features

  • Implement your handlers as structs with HTTP Verbs as method
  • Plugin system for template engines, session engines and ORM
  • Use gorilla to manipulate routes and mux
  • Handler spawned with concurrency

How to use

Install with "go get" command:

go get gopkg.in/kwiscale/framework.v1
go get gopkg.in/kwiscale/framework.v1/cmd/kwiscale

Create a project:

kwiscale new app myapp
cd $GOPATH/myapp

Create a handler kwiscale new handler index / homepage

Open generated handlers/index.go and append "Get" method:

package handlers

import (
	"gopkg.in/kwiscale/framework.v1"
)


func init(){
	kwiscale.Register(&IndexHandler{})
}

type IndexHandler struct { kwiscale.RequestHandler }

func (handler *IndexHandler) Get(){
    handler.WriteString("Hello you !")
}

And run the app !:

go run *.go

Now, go to http://127.0.0.1:8000 - you should see "Hello You!". If not, check "kwiscale.yml" file if port is "8000", check error log, and so on.

If really there is a problem, please submit an issue.

Basic Templates

Kwiscale provides a "basic" template engine that use http/template. Kwiscale only add a "very basic template override system".

If you plan to have a complete override system, please use http://gopkg.in/kwiscale/template-pongo2.v1 that implements pango2 template.

See the following example.

Append templates directory:

mkdir templates

Then create templates/main.html:

<!DOCTYPE html>
<html>
    <head>
        <title>{{ if .title }}{{.title}}{{ else }} Default title {{ end }}</title>
    </head>
    <body>
        {{/* Remember to use "." as context */}}
        {{ template "CONTENT" . }}
    </body>
</html>

Now create templates/home directory:

mkdir templates/home

Create templates/home/welcome.html:

{{/* override "main.html" */}}

{{ define "CONTENT" }}
    This the welcome message {{ .msg }}
{{ end }}

This template overrides "main.html" (in ./templates/ directory) and append "CONTENT" template definition. So, the "CONTENT" block will appear at template "CONTENT" in "main.html". That's all.

In handlers/index.go you may now ask for template rendering:

func (h *IndexHandler) Get() {
    h.Render("home/welcome.html", map[string]string{
        "title" : "Welcome !!!",
        "msg"   : "Hello you",
    })
}

You can override template directory using App configuration passed to the constructor:

app := kwiscale.NewApp(&kswiscale.Config{
    TemplateDir: "./my-template-dir",
})

TODO

Features in progress:

  • Database ORM interface
  • Custom Error handler