djangolang

package module
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 5, 2024 License: MIT Imports: 20 Imported by: 3

README

计划

1、 完整的go web项目 2、 分析数据,抽离数据 3、 完善注册接口,设计模式加持 4、 代码自动化生成 5、 后续优化 6、 借用devopsxp项目对项目进行设计模式的改造

Install

快速安装

cd examples/sample && go run main.go

全功能

cd examples/allinone && go run example.go

Tutorial

首先使用github.com/lflxp/djangolang很简单,下面是一个Demo

package main

import (
	"github.com/lflxp/djangolang"
	"time"

	"github.com/gin-gonic/gin"
)

type Demotest2 struct {
	Id         int64     `xorm:"id pk not null autoincr" name:"id" search:"true"`
	Country    string    `json:"country" xorm:"varchar(255) not null" search:"true"`
	Zoom       string    `json:"zoom" xorm:"varchar(255) not null"`
	Company    string    `json:"company" xorm:"varchar(255) not null"`
	Items      string    `json:"items" xorm:"varchar(255) not null"`
	Production string    `json:"production" xorm:"varchar(255) not null"`
	Count      string    `json:"count" xorm:"varchar(255) not null"`
	Serial     string    `json:"serial" xorm:"varchar(255) not null" search:"true"`
	Extend     string    `json:"extend" xorm:"varchar(255) not null"`
	Files      string    `xorm:"file" name:"file" verbose_name:"上传文件" colType:"file"`
	Times      time.Time `xorm:"times" name:"times" verbose_name:"时间" colType:"time" list:"true" search:"true"`
}

func init() {
	djangolang.RegisterAdmin(new(Demotest2))
}

func main() {
	r := gin.Default()
	r.GET("/", func(c *gin.Context) {
		c.Redirect(301, "/admin/index")
	})

	djangolang.RegisterControllerAdmin(r)
	r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

高级功能展示

package main

import (
	"crypto/tls"
	"crypto/x509"
	"github.com/lflxp/djangolang"
	"github.com/lflxp/djangolang/middlewares"
	ctls "github.com/lflxp/djangolang/tls"
	"github.com/lflxp/djangolang/utils"
	"fmt"
	"net/http"
	"os"
	"os/signal"

	"github.com/gin-contrib/gzip"
	"github.com/gin-gonic/gin"
	log "github.com/go-eden/slf4go"
	"github.com/skratchdot/open-golang/open"
)

var GinEngine *gin.Engine

type Args struct {
	Host        string
	Port        string
	IsHttps     bool
	OpenBrowser bool
	Auth        struct {
		Url         string
		IdentityKey string
		Dev         bool
	}
}

func Run(args *Args) {
	// gin.SetMode(gin.ReleaseMode)
	GinEngine = gin.Default()

	// 注册路由

	GinEngine.Use(gin.Logger())
	GinEngine.Use(gin.Recovery())
	GinEngine.Use(middlewares.Cors())
	GinEngine.Use(gzip.Gzip(gzip.DefaultCompression, gzip.WithExcludedPathsRegexs([]string{".*"})))
	// GinEngine.Use(middlewares.NoRouteHandler)
	GinEngine.GET("/health", middlewares.RegisterHealthMiddleware)
	GinEngine.GET("/", func(c *gin.Context) {
		c.Redirect(301, "/admin/index")
	})
	Registertest(GinEngine)
	djangolang.RegisterControllerAdmin(GinEngine)
	log.Infof("ip %s port %s", args.Host, args.Port)

	if args.Host == "" {
		// instance.Fatal("Check Host or Port config already!!!")
		args.Host = "0.0.0.0"
	}

	if args.Port == "" {
		args.Port = "8002"
	}

	var server *http.Server
	if args.IsHttps {
		err := ctls.Refresh()
		if err != nil {
			panic(err)
		}

		pool := x509.NewCertPool()
		caCeretPath := "ca.crt"

		caCrt, err := os.ReadFile(caCeretPath)
		if err != nil {
			panic(err)
		}

		pool.AppendCertsFromPEM(caCrt)

		server = &http.Server{
			Addr:    fmt.Sprintf("%s:%s", args.Host, args.Port),
			Handler: GinEngine,
			TLSConfig: &tls.Config{
				ClientCAs:  pool,
				ClientAuth: tls.RequestClientCert,
			},
		}
	} else {
		server = &http.Server{
			Addr:    fmt.Sprintf("%s:%s", args.Host, args.Port),
			Handler: GinEngine,
		}

	}

	quit := make(chan os.Signal)
	signal.Notify(quit, os.Interrupt)

	go func() {
		<-quit
		log.Warn("receive interrupt signal")
		if err := server.Close(); err != nil {
			log.Fatal("Server Close:", err)
		}
	}()

	var openUrl string
	for index, ip := range utils.GetIPs() {
		if args.IsHttps {
			log.Infof("Listening and serving HTTPS on https://%s:%s", ip, args.Port)
		} else {
			log.Infof("Listening and serving HTTPS on http://%s:%s", ip, args.Port)
		}

		if index == 0 {
			openUrl = fmt.Sprintf("%s:%s", ip, args.Port)
		}
	}
	if args.IsHttps {
		if args.OpenBrowser {
			open.Start(fmt.Sprintf("https://%s", openUrl))
		}
		if err := server.ListenAndServeTLS("ca.crt", "ca.key"); err != nil {
			if err == http.ErrServerClosed {
				log.Warn("Server closed under request")
			} else {
				log.Fatalf("Server closed unexpect %s", err.Error())
			}
		}
	} else {
		if args.OpenBrowser {
			open.Start(fmt.Sprintf("http://%s", openUrl))
		}
		if err := server.ListenAndServe(); err != nil {
			if err == http.ErrServerClosed {
				log.Warn("Server closed under request")
			} else {
				log.Fatalf("Server closed unexpect %s", err.Error())
			}
		}
	}

	log.Warn("Server exiting")
}

func main() {
	args := Args{
		IsHttps:     true,
		OpenBrowser: true,
		Port:        "9000",
	}
	Run(&args)
}

介绍

Django 是一款流行的 Python Web 框架,提供了丰富的功能和灵活的配置选项,使得开发者可以快速地构建高质量、可扩展的 Web 应用程序。而 Golang 版本的 Django 框架 Django-Golang,则是将 Django 框架用 Golang 语言重新实现的一个版本,具有更高的运行时性能和更好的并发支持。

Django-Golang 的特点:

  1. 高性能:Django-Golang 使用 Golang 语言编写,具有更高的运行时性能,可以快速地处理请求和响应。

  2. 并发支持:Django-Golang 支持并发编程,可以轻松地编写多线程程序,提高程序的并发性能。

  3. 灵活的配置:Django-Golang 提供了灵活的配置选项,开发者可以根据自己的需求进行自定义。

  4. 丰富的功能:Django-Golang 继承了 Django 框架强大的功能,包括 ORM、模板引擎、表单、管理员等功能。

安装 Django-Golang:

  1. 安装 Golang:可以从官方网站(https://golang.org/dl/)下载适合自己操作系统的安装包,然后按照官方文档的指引进行安装。

  2. 安装 Django-Golang:在命令行中输入以下命令即可:

go get github.com/django/golang-django

这将下载 Django-Golang 并将其安装到你的 Golang 环境中。

使用 Django-Golang:

  1. 创建一个新的 Django-Golang 项目:在命令行中输入以下命令即可:
django-golang-start myproject

这将创建一个新的 Django-Golang 项目,其中 myproject 是你的项目名称。

  1. 运行 Django-Golang 项目:在命令行中输入以下命令即可:
cd myproject
python manage.py runserver

这将启动 Django-Golang 项目,并在默认的端口 8000 上运行。

  1. 创建 Django-Golang 视图:在 myproject/views.py 文件中,可以定义 Django-Golang 视图,例如:
from django.http import HttpResponse

def hello(request):
  return HttpResponse("Hello, Django-Golang!")
  1. 创建 Django-Golang 模板:在 myproject/templates 目录下,可以创建 Django-Golang 模板,例如:
<h1>{{ message }}</h1>
  1. 配置 Django-Golang 项目:在 myproject/settings.py 文件中,可以配置 Django-Golang 项目的各种参数,例如:
DEBUG = True

Django-Golang 的配置选项非常丰富,可以根据自己的需求进行自定义。此外,Django-Golang 还提供了丰富的第三方库支持,可以方便地集成第三方库到项目中,例如:数据库、缓存、队列等。

总结:Django-Golang 是一个将 Django 框架用 Golang 语言重新实现的高性能 Web 框架,具有更高的运行时性能和更好的并发支持,非常适合开发高质量、可扩展的 Web 应用程序。如果你想要使用 Golang 构建 Web 应用程序,Django-Golang 是一个不错的选择。

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	FuncMap template.FuncMap
)
View Source
var Static embed.FS
View Source
var Templates embed.FS

Functions

func AddFuncMap

func AddFuncMap(funcName string, funcs interface{})

func GetRegisterByName

func GetRegisterByName(name string) map[string]string

func GetRegistered

func GetRegistered() []map[string]string

func RegisterAdmin

func RegisterAdmin(data ...interface{}) error

注册Admin模型自动解析

func RegisterControllerAdmin

func RegisterControllerAdmin(router *gin.Engine)

func RegisterStruct

func RegisterStruct(data ...interface{}) error

仅注册orm model

func RegisterTemplate

func RegisterTemplate(router *gin.Engine)

func RigsterStruct

func RigsterStruct(data interface{}) map[string]string

http://code.lflxp.cn/life/services/src/master/util/db/xormTest.go 收集struct信息

Types

This section is empty.

Directories

Path Synopsis
li
examples
prometheus中间件
prometheus中间件
rsa

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL