Example #1
0
func CreateFromSelectCommandAndHttpContext(Select *MysqlAst.SelectCommand, Ctx *kmgHttp.Context) *KmgPage {
	page := &KmgPage{}
	page.BaseUrl = Ctx.GetRequestUrl()
	page.CurrentPage = Ctx.InNum("Page")
	page.PageKeyName = "Page"
	page.init()
	return page.runSelectCommand(Select)
}
Example #2
0
// 默认不用这个,容易搞的测试里面到处都是log.
// TODO 静态文件的log问题
// TODO 尝试搞出更好用的log系统.
func RequestLogger(ctx *kmgHttp.Context, processorList []HttpProcessor) {
	startTime := time.Now()
	processorList[0](ctx, processorList[1:])
	time := time.Since(startTime)
	log := ctx.Log()
	log.ProcessTime = kmgTime.DurationFormat(time)
	kmgLog.Log("Request", log)
}
Example #3
0
func PanicHandler(ctx *kmgHttp.Context, processorList []HttpProcessor) {
	err := kmgErr.PanicToErrorAndLog(func() {
		processorList[0](ctx, processorList[1:])
	})
	if err != nil {
		ctx.Error(err)
		return
	}
	return
}
Example #4
0
func (e Example) DemoPostAction(ctx *kmgHttp.Context) {
	ctx.MustPost()
	b := kmgYaml.MustMarshal(ctx.GetInMap())
	ctx.WriteString(kmgBootstrap.NewWrap("DemoPostAction", kmgBootstrap.Pre(`
You send me a HTTP POST Request
`+string(b))).HtmlRender())
}
Example #5
0
func Dispatcher(ctx *kmgHttp.Context, processorList []HttpProcessor) {
	apiName := ctx.InStr("n")
	if apiName == "" && EnterPointApiName != "" {
		if ctx.GetRequestUrl() == "/favicon.ico" {
			// 避免网站图标请求,占用大量资源.
			ctx.NotFound("api not found")
			return
		}
		apiName = EnterPointApiName
	}
	apiFunc, ok := controllerObjMap[apiName]
	if !ok {
		ctx.NotFound("api not found")
		return
	}

	apiFunc(ctx)
	return
}
Example #6
0
func (e Example) Demo1(ctx *kmgHttp.Context) {
	ctx.WriteString(kmgBootstrap.NewWrap("kmg bootstrap demo",
		kmgBootstrap.NavBar{
			Title: kmgView.String("kmgBootstrap DEMO"),
			OptionList: []kmgBootstrap.NavBarNode{
				{Name: "主页", Url: "/"},
				{
					Name: "测试菜单1",
					Url:  "/?menu=1",
					ChildList: []kmgBootstrap.NavBarNode{
						{
							Name: "测试菜单-子菜单1-1",
							Url:  "/?menu=1-1",
							ChildList: []kmgBootstrap.NavBarNode{
								{
									Name: "测试菜单-子菜单1-1-1",
									Url:  "/?menu=1-1-1",
									ChildList: []kmgBootstrap.NavBarNode{
										{Name: "测试菜单-子菜单1-1-1-1", Url: "/?menu=1-1-1-1"},
									},
								},
								{Name: "测试菜单-子菜单1-1-2", Url: "/?menu=1-1-2"},
							},
						},
						{Name: "测试菜单-子菜单1-2", Url: "/?menu=1-2"},
					},
				},
			},
			RightOptionList: []kmgBootstrap.NavBarNode{
				{
					Name: "测试菜单1右",
					Url:  "/",
					ChildList: []kmgBootstrap.NavBarNode{
						{Name: "测试菜单-子菜单1-1右边", Url: "/"},
					},
				},
			},
		},
		kmgBootstrap.Panel{
			Title: "Panel",
			Body: kmgBootstrap.Panel{
				Title: "Panel",
				Body:  kmgView.String("Body"),
			},
		},
		kmgBootstrap.Panel{
			Title: "Table",
			Body: kmgBootstrap.Table{
				Caption: kmgView.String("Caption"),
				TitleList: []kmgView.HtmlRenderer{
					kmgView.String("title1"),
					kmgView.String("title2"),
				},
				DataList: [][]kmgView.HtmlRenderer{
					{
						kmgView.String("r1c1"),
						kmgView.String("r1c2"),
					},
					{
						kmgView.String("r2c1"),
						kmgView.String("r2c2"),
					},
				},
			},
		},
		kmgBootstrap.Panel{
			Title: "DropDown",
			Body: kmgView.HtmlRendererList{
				kmgView.String("使用 DropDown"),
				kmgBootstrap.DropDown{
					Title: kmgBootstrap.Button{
						Size:  kmgBootstrap.ButtonSizeSmall,
						Color: kmgBootstrap.ButtonColorSuccess,
						Content: kmgView.HtmlRendererList{
							kmgView.String("更多"),
							kmgBootstrap.Blank(1),
							kmgBootstrap.NewCaret(),
						},
					},
					OptionList: []kmgBootstrap.NavBarNode{
						{
							Name: "Say",
							Url:  "/",
							ChildList: []kmgBootstrap.NavBarNode{
								{
									Name: "你好",
								},
								{
									Name: "Hello",
								},
								{
									Name: "もしもし",
								},
								{
									Name: "Ciao",
								},
							},
						},
						{
							Name: "Do",
							ChildList: []kmgBootstrap.NavBarNode{
								{
									Name: "Walk",
								},
								{
									Name: "Sleep",
								},
							},
						},
					},
				},
				kmgView.String("将操作集中起来,节省空间"),
				kmgBootstrap.Br(1),
				kmgView.String("还可以使用快捷方法 kmgBootstrap.NewMoreButton,获得默认样式"),
				kmgBootstrap.NewMoreButton([]kmgBootstrap.NavBarNode{
					{
						Name: "新增",
					},
					{
						Name: "删除",
					},
					{
						Name: "编辑",
					},
				}),
			},
		},
		kmgBootstrap.Panel{
			Title: "Icon",
			Body: kmgBootstrap.Icon{
				IconName:      "exchange",
				IconColor:     kmgBootstrap.TextDanger,
				AttributeNode: kmgBootstrap.Popover{Title: "这里应该有一个图标"},
			},
		},
		kmgBootstrap.Panel{
			Title: "NavTabList",
			Body: kmgView.HtmlRendererList{
				kmgBootstrap.NavTabList{
					ActiveName: "状态1",
					OptionList: []kmgBootstrap.NavTabOption{
						{Name: "状态1", Url: "/#1"},
						{Name: "状态2", Url: "/#2"},
					},
				},
				kmgBootstrap.Br(1),
				kmgBootstrap.NavTabList{
					ActiveName:  "状态3",
					CustomClass: "nav-tabs",
					OptionList: []kmgBootstrap.NavTabOption{
						{Name: "状态3", Url: "/#3"},
						{Name: "状态4", Url: "/#4"},
					},
				},
			},
		},
		kmgBootstrap.Panel{
			Title: "Form",
			Body: kmgView.HtmlRendererList{
				kmgBootstrap.Form{
					Url: "/",
					InputList: []kmgView.HtmlRenderer{
						kmgBootstrap.InputVerticalString{
							Name:     "UserName",
							ShowName: "用户名",
							Value:    "enter your username here",
							Comment:  "必填",
							Need:     true,
						},
						kmgBootstrap.TextAreaVerticalString{
							ShowName: "服务条款",
							Value:    "服务条款",
							ReadOnly: true,
						},
						kmgBootstrap.SelectVerticalString{
							ShowName: "性别",
							Value:    "girl",
							Name:     "Gender",
							OptionList: []kmgBootstrap.SelectOption{
								{ShowName: "男", Value: "boy"},
								{ShowName: "女", Value: "girl"},
							},
						},
					},
				},
				kmgBootstrap.Br(2),
				kmgBootstrap.Pre(`从 URL 直接发送 POST 的链接`),
				kmgBootstrap.NewPostButton("/?n=main.Example.DemoPostAction&Name=kmg&Age=12", "POST 请求"),
				kmgBootstrap.Blank(2),
				kmgBootstrap.NewGetButton("/?n=main.Example.DemoPostAction&Name=kmg&Age=12", "非 POST 请求"),
			},
		},
	).HtmlRender())
}
Example #7
0
func (t TestApiObj) Count(ctx *kmgHttp.Context) {
	shareSessionId = ctx.Session.Id
	ctx.WriteString(ctx.Session.Id)
}
Example #8
0
func (t TestObj) TestHandleUploadFile(ctx *kmgHttp.Context) {
	fileInfo := ctx.MustInFile("UFile")
	file, err := fileInfo.Open()
	if err != nil {
		panic(err)
	}
	defer file.Close()
	content, err := ioutil.ReadAll(file)
	if err != nil {
		panic(err)
	}
	a := ctx.InStr("a")
	ctx.WriteString(fileInfo.Filename)
	ctx.WriteString(" ")
	ctx.WriteString(a)
	ctx.WriteString(" ")
	ctx.WriteString(string(content))
}
Example #9
0
func (t TestObj) TestFunc(ctx *kmgHttp.Context) {
	a := ctx.InNum("a")
	ctx.WriteString(strconv.Itoa(a + i))
}
Example #10
0
func (ot *OverseaTrade) mustNotifyActionV2(ctx *kmgHttp.Context, f func(info OverseaTradeTransaction)) {
	kmgLog.Log("Alipay", "Oversea PayNotifyAction", ctx.GetInMap())
	var err error
	ctx.MustPost()
	info := OverseaTradeTransaction{}
	//info.NotifyId = ctx.MustInStr("notify_id") 这两项没有什么意义.
	//info.NotifyTime = kmgTime.MustFromMysqlFormatInLocation(ctx.MustInStr("notify_time"), kmgTime.BeijingZone)
	info.OutTradeNo = ctx.MustInStr("out_trade_no")

	info.Currency = ctx.MustInStr("currency")
	info.TotalFee, err = kmgStrconv.ParseFloat64(ctx.MustInStr("total_fee"))
	if err != nil {
		panic(err)
	}
	info.TradeStatus = OverseaTradeStatus(ctx.MustInStr("trade_status"))
	info.TradeNo = ctx.MustInStr("trade_no")
	err = ot.md5Verify(ctx.GetInMap())
	if err != nil {
		panic(err)
	}
	err = ot.VerifyNotify(ctx.MustInStr("notify_id"))
	if err != nil {
		panic(err)
	}
	// 向支付宝询问这个订单的情况
	oInfo := ot.MustSingleTransactionQuery(info.OutTradeNo)
	if oInfo.TradeStatus != info.TradeStatus {
		panic("两次查询订单状态不一致")
	}
	info.Subject = oInfo.Subject
	f(info)
	ctx.WriteString("success")
}
Example #11
0
// 同步回调
// 调用前请清除您自己的参数.
// @deprecated 请使用 OverseaTrade.PayFinishCallback 和 OverseaTrade.PayCloseCallback
func (ot *OverseaTrade) MustReturnPage(ctx *kmgHttp.Context) (info OverseaTradeTransaction) {
	kmgLog.Log("Alipay", "Oversea PayReturnPage", ctx.GetInMap())
	var err error
	info.OutTradeNo = ctx.MustInStr("out_trade_no")
	info.Currency = ctx.MustInStr("currency")
	info.TotalFee, err = kmgStrconv.ParseFloat64(ctx.MustInStr("total_fee"))
	if err != nil {
		panic(err)
	}
	info.TradeStatus = OverseaTradeStatus(ctx.MustInStr("trade_status"))
	info.TradeNo = ctx.MustInStr("trade_no")
	//这个也可以验证数据,只是文档上面没写.
	err = ot.md5Verify(ctx.GetInMap())
	if err != nil {
		panic(err)
	}
	// 向支付宝询问这个订单的情况
	oInfo := ot.MustSingleTransactionQuery(info.OutTradeNo)
	if oInfo.TradeStatus != info.TradeStatus {
		panic("两次查询订单状态不一致")
	}
	info.Subject = oInfo.Subject
	return info
}
Example #12
0
// 请不要手动调用,这个是自动注册到 kmgControllerRunner里面的
func (ot *OverseaTrade) NotifyAction(ctx *kmgHttp.Context) {
	ctx.DeleteInMap("n")
	ot.mustNotifyActionV2(ctx, ot.payCallbackProceess)
}
Example #13
0
// 请不要手动调用,这个是自动注册到 kmgControllerRunner里面的
func (ot *OverseaTrade) ReturnPage(ctx *kmgHttp.Context) {
	ctx.DeleteInMap("n")
	info := ot.MustReturnPage(ctx)
	ot.payCallbackProceess(info)
	ot.PayReturnPageCallback(info, ctx)
}
Example #14
0
//Server Side
func GetIPFromCTXAndRespond(ctx *kmgHttp.Context) {
	req := ctx.GetRequest()
	address := req.RemoteAddr
	address = strings.Split(address, ":")[0]
	ctx.WriteString("OK" + address)
}
Example #15
0
func (s *Demo) DemoClientIp(httpCtx *kmgHttp.Context) (ip string) {
	return httpCtx.MustGetClientIp().String()
}