当前位置:首页 » ThinkPHP框架知识

dotweb框架之旅 [四] - 常用对象-HttpContext

2017-10-22 22:23 本站整理 浏览(28)

dotweb属于一个Web框架,希望通过框架行为,帮助开发人员快速构建Web应用,提升开发效率,减少不必要的代码臃肿。

框架地址:https://github.com/devfeel/dotweb

dotweb包含以下几个常用对象:

  • App(dotweb) App容器,为Web请求处理提供必要的容器类功能。
  • HttpServer 用于真正处理Web请求的服务模块。
  • HttpContext 用于提供单次请求处理中请求信息与响应信息的快捷处理与唯一入口。
  • Response 用于从服务器向用户发送输出的结果。
  • Request 用于从用户那里取得信息。
  • Session 用于存储关于某个连接会话的信息,或者修改相关的设置。目前支持存储本机内存与Redis分布式。

本章主要对HttpContext对象展开介绍。

HttpContext实现Context接口,主要承担单次请求处理中请求信息、响应信息、全局对象的快捷功能与唯一入口。

主要方法

方法 描述
HttpServer()
 获取当前请求所属HttpServer对象
Response()
 获取当前请求的Response对象
Request()
 获取当前请求的Request对象
WebSocket()
 如果是WebSocket连接,返回WebSocket对象
HijackConn()
 如果是Hijack请求,返回Hijack连接对象
AppContext()
 返回全局对象容器
Cache()
 返回全局缓存对象
Items()
 返回当前请求流程内有效的对象容器
ViewData()
 返回用于模板数据传输的对象容器
Session()
 返回当前请求有效的Session对象
Redirect()
 提供跳转支持,默认建议302跳转
QueryString()
 指定Key查询Get参数的值
PostFormValue()
 指定Key查询Post参数的值
GetRouterName()
 指定Key查询动态路由值
ReadCookie()
 指定Key读取Cookie对象
Bind()
 将Json、Xml、Form提交的属性绑定指定结构体
Write()
 指定状态码输出二进制内容
WriteString()\WriteStringC()
 输出字符串,默认text/plain,其中以C结尾的方法支持设置状态码
WriteHtml()\WriteHtmlC()
 输出Html字符串,默认text/html,其中以C结尾的方法支持设置状态码
WriteJson()\WriteJsonC()
 输出Json字符串,默认application/json,其中以C结尾的方法支持设置状态码
WriteJsonp()
 输出适配Jsonp的字符串
View()ViewC()
 指定模板名称输出Html内容,其中以C结尾的方法支持设置状态码

常用功能示例:

1、获取Get参数值

func Index(ctx dotweb.Context) error {
    userid := ctx.QueryString("userid")
    ctx.WriteString(userid)
    return nil
}

2、获取Post参数值

func Index(ctx dotweb.Context) error {
    userid := ctx.PostFormValue("userid")
    ctx.WriteString(userid)
    return nil
}

3、获取Post Body

func Index(ctx dotweb.Context) error {
    data := ctx.Request().PostBody()
    ctx.Write(200, data)
    return nil
}

4、获取上传的文件

func Index(ctx dotweb.Context) error {
    file, err := ctx.Request().FormFile("filekey")
    if err != nil {
        ctx.WriteString("upload file error:", err.Error())
    } else {
        ctx.WriteString(file.FileName())
    }
    return nil
}

5、读取Cookie

func Index(ctx dotweb.Context) error {
    c, err := ctx.ReadCookie("UserName")
    if err!= nil{
        ctx.WriteString(err.Error())
    }else {
        ctx.WriteString(c.Value)
    }
    return nil
}

6、写入Session值

func Index(ctx dotweb.Context) error {
    ctx.Session().Set("UserID", 1)
    ctx.WriteString("set session success")
    return nil
}

7、输出字符串(默认200状态码)

func Index(ctx dotweb.Context) error {
    ctx.WriteString("welcome to dotweb")
    return nil
}

8、输出Json字符串(默认200状态码)

func Index(ctx dotweb.Context) error {
    type User struct {
        UserName string
        Age int
    }
    u:=&User{
        UserName:"dotweb",
        Age:1,
    }
    ctx.WriteJson(u)
    return nil
}

9、指定模板名称输出Html字符串

type UserInfo struct {
    UserName string
    Sex      bool
}

type BookInfo struct {
    Name string
    Size int64
}

func TestView(ctx dotweb.Context) error {
    ctx.ViewData().Set("data", "图书信息")
    ctx.ViewData().Set("user", &UserInfo{UserName: "user1", Sex: true})
    m := make([]*BookInfo, 5)
    m[0] = &BookInfo{Name: "book0", Size: 1}
    m[1] = &BookInfo{Name: "book1", Size: 10}
    m[2] = &BookInfo{Name: "book2", Size: 100}
    m[3] = &BookInfo{Name: "book3", Size: 1000}
    m[4] = &BookInfo{Name: "book4", Size: 10000}
    ctx.ViewData().Set("Books", m)

    err := ctx.View("testview.html")
    return err
}

10、跳转地址

func Redirect(ctx dotweb.Context) error {
    err := ctx.Redirect(http.StatusFound, "http://www.baidu.com")
    if err != nil {
        ctx.WriteString(err)
    }
    return err
}

11、设置Header

func Index(ctx dotweb.Context) error {
    ctx.Response().Header().Set("Content-Type", "text/html; charset=utf-8")
    ctx.WriteString("welcome to dotweb")
    return nil
}

以上简单示例,展示了如何通过Context获取请求信息,设置输出信息,使用Session等。

更多代码可参考 https://github.com/devfeel/dotweb-example

欢迎各位加入我们的go语言QQ群:193409346