beego框架(golang)学习过滤器(实现restful请求)
过滤器
在用beego做restful路由的时候,遇到了除了GTE、POST之外的HTTP请求,比如 PUT、PATCH、delete请求无法通过路由认证,报错误:405 METHOD NOT ALLOW。在参考官网后,发现自己过滤器可以改变HTTP请求方式。
比如前端 JQUERY ajax发送DELETE请求
$.post(url, {id:id, _method:"DELETE", _xsrf:xsrf_token}, function (data) {
processAjaxReturnData(data)
});
虽然beego支持restful路由,但是直接请求是无法请请求通的,需要过滤器处理。
文件main.go
package main
......
func init() { // 支持表单伪造PUT,DELETE,PATCH,OPTIONS请求 beego.InsertFilter("*", beego.BeforeRouter, handlers.RestfulHandler()) }
func main() { ...... beego.Run() }
这样就构建了一个过滤器,用于将带有_method的请求方式直接赋在请求头上。
文件 /beego_admin_template/handlers/restfulHandler.go
package handlers
import (
"github.com/astaxie/beego/context"
)
var supportMethod = [6]string{"GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"}
// 支持伪造restful风格的http请求
// _method = "DELETE" 即将http的POST请求改为DELETE请求
func RestfulHandler() func(ctx *context.Context) {
var restfulHandler = func(ctx *context.Context) {
// 获取隐藏请求
requestMethod := ctx.Input.Query("_method")
if requestMethod == ""{
// 正常请求
requestMethod = ctx.Input.Method()
}
// 判断当前请求是否在允许请求内
flag := false
for _, method := range supportMethod{
if method == requestMethod {
flag = true
break
}
}
// 方法请求
if flag == false {
ctx.ResponseWriter.WriteHeader(405)
ctx.Output.Body([]byte("Method Not Allow"))
return
}
// 伪造请求方式
if requestMethod != "" && ctx.Input.IsPost() {
ctx.Request.Method = requestMethod
}
}
return restfulHandler
}
过滤器的作用
过滤器个人认为类似于中间件,可以在处理业务逻辑之前,进行一些必要的处理,比如请求验证、权限认证、强制跳转等等。在上一篇beego的验证码处理就看到了这样的一句代码
// create filter for serve captcha image
beego.InsertFilter(cpt.URLPrefix+"*", beego.BeforeRouter, cpt.Handler)
这是专门为验证码图片进行的处理,表示在beego路由处理之前,用cpt.Handler方法处理验证码图片。
官网具体使用方式可以参考 https://beego.me/docs/mvc/controller/filter.md
beego框架(golang)学习过滤器(实现restful请求)的更多相关文章
- beego框架(golang)学习验证码
beego框架(golang)学习验证码 登录页面使用验证码 路由设置 /beego_admin_template/routers/router.go get请求页面, post验证用户名密码和验证码 ...
- golang学习之beego框架配合easyui实现增删改查及图片上传
golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...
- Golang入门教程(十一)beego 框架之RESTful Controller 路由
官方文档:https://beego.me/docs/mvc/controller/router.md 什么是路由设置呢?前面介绍的 MVC 结构执行时,介绍过 beego 存在三种方式的路由:固定路 ...
- golang学习笔记7 使用beego swagger 实现API自动化文档
golang学习笔记7 使用beego swagger 实现API自动化文档 API 自动化文档 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/doc ...
- go语言,golang学习笔记2 web框架选择
go语言,golang学习笔记2 web框架选择 用什么go web框架比较好呢?能不能推荐个中文资料多的web框架呢? beego框架用的人最多,中文资料最多 首页 - beego: 简约 & ...
- Beego 框架学习(一)
Beego官网本身已经整理的非常详细了,但是作为一个学习者,我还是决定自己好好整理一下,这样在后面使用的时候自己对每部分才能非常熟悉,及时忘记了,也可以迅速定位自己要用的知识在哪里.当然也是对官网的一 ...
- golang学习笔记8 beego参数配置 打包linux命令
golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ...
- Beego框架学习--(核心:数据交互)
Beego框架学习记录 1.beego简介 beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API.Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计 ...
- 让python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求
这两天在用python的bottle框架开发后台管理系统,接口约定使用RESTful风格请求,前端使用jquery ajax与接口进行交互,使用POST与GET请求时都正常,而Request Meth ...
随机推荐
- POJ 2987 Firing 最大流 网络流 dinic 模板
https://www.cnblogs.com/137shoebills/p/9100790.html http://poj.org/problem?id=2987 之前写过这道题,码一个dinic的 ...
- neo4j基础操作
删除所有节点 MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r 创建节点 CREATE(:person{name:'潘峰',age:27}) CREATE( ...
- AtCoder Grand Contest 004题解
传送门 \(A\) 咕咕 int a,b,c; int main(){ scanf("%d%d%d",&a,&b,&c); if((a&1^1)|( ...
- Java SpringBoot 实体类数据自动验证
package demo.dto; import org.hibernate.validator.constraints.Length; import javax.validation.constra ...
- Tkinter 之记事本项目实战
一.效果图 二.文件 链接:https://pan.baidu.com/s/1CUkfWpfH8t2GSJyy5hYv-A 提取码:5yvn 后续可能做一些功能扩展,有需要源码的可以评论联系我!!!
- 根据数据文件自定义边界条件timeVaryingUniformFixedValue【转载】
转载自:http://blog.sina.com.cn/s/blog_e256415d0101nf9j.html 在OpenFOAM中,可以创建数据文件,自定义边界条件. 下面的例子读取outletP ...
- DELPHI LINUX中间件隆重发布
LINUX和WINDOWS是目前最流利的两个服务器操作系统,各种云服务商也是同时提供这2种操作系统的云服务器. 即日起,在原有WINDOWS中间件的产品基础上,再隆重推出新产品:LINUX中间件.这样 ...
- C 套接字
套接字函数 1 创建套接字──socket() 应用程序在使用套接字前,首先必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段, 其调用格式如下:SOCKET PASCAL ...
- Java_jdbc 基础笔记之一 数据库连接
方式一: 1.创建一个Driver实现类的对象 2.准备连接数据库的基本信息:url,user,password 3.调用Driver接口的connect(url,info)获取数据库连接 * Dri ...
- Centos7修改为固定IP后 yum 出现could not retrieve mirrorlist
Centos7修改为固定IP后 yum 出现could not retrieve mirrorlist,发现yum源的域名无法解析 按照6,修改/etc/resovle.conf,新增域名解析服务器1 ...