过滤器

在用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请求)的更多相关文章

  1. beego框架(golang)学习验证码

    beego框架(golang)学习验证码 登录页面使用验证码 路由设置 /beego_admin_template/routers/router.go get请求页面, post验证用户名密码和验证码 ...

  2. golang学习之beego框架配合easyui实现增删改查及图片上传

    golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...

  3. Golang入门教程(十一)beego 框架之RESTful Controller 路由

    官方文档:https://beego.me/docs/mvc/controller/router.md 什么是路由设置呢?前面介绍的 MVC 结构执行时,介绍过 beego 存在三种方式的路由:固定路 ...

  4. golang学习笔记7 使用beego swagger 实现API自动化文档

    golang学习笔记7 使用beego swagger 实现API自动化文档 API 自动化文档 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/doc ...

  5. go语言,golang学习笔记2 web框架选择

    go语言,golang学习笔记2 web框架选择 用什么go web框架比较好呢?能不能推荐个中文资料多的web框架呢? beego框架用的人最多,中文资料最多 首页 - beego: 简约 & ...

  6. Beego 框架学习(一)

    Beego官网本身已经整理的非常详细了,但是作为一个学习者,我还是决定自己好好整理一下,这样在后面使用的时候自己对每部分才能非常熟悉,及时忘记了,也可以迅速定位自己要用的知识在哪里.当然也是对官网的一 ...

  7. golang学习笔记8 beego参数配置 打包linux命令

    golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ...

  8. Beego框架学习--(核心:数据交互)

    Beego框架学习记录 1.beego简介 beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API.Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计 ...

  9. 让python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求

    这两天在用python的bottle框架开发后台管理系统,接口约定使用RESTful风格请求,前端使用jquery ajax与接口进行交互,使用POST与GET请求时都正常,而Request Meth ...

随机推荐

  1. javascript之大文件分段上传、断点续传

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  2. 爬虫基础以及一个简单的实例(requests,re)

    最近在看爬虫方面的知识,看到崔庆才所著的<Python3网络爬虫开发实战>一书讲的比较系统,果断入手学习.下面根据书中的内容,简单总结一下爬虫的基础知识,并且实际练习一下.详细内容请见:h ...

  3. 如何在Processing中用鼠标获取RGB颜色数值

    要做一个抠图应用,所以随手做了个鼠标取色,代码如下: void mousePressed(){ int imgC = get(mouseX,mouseY); int R = (imgC >> ...

  4. 洛谷P5017摆渡车

    题目 一道做法多种多样的题,DP做法的状态也很多. 我用\(dp[i]\)表示在第i秒发车的时间和,然后dp方程就很好写了 \(dp[i] = dp[j] + i车的等待时间\)j属于i-2m ~ i ...

  5. 代码还原,IDA中使用的宏

    在IDA7.0中的定义文件拷贝的. 如果想使用,直接去IDA的plugins插件目录下.包含它的 **defs.h"" 如下: /* This file contains defi ...

  6. Three.js中的group,obj,模型中layers层级与相机

    目录 Three.js中的group,obj,模型中layers层级与相机 layers group中的.layers.mask设置 一些设想 Three.js中的group,obj,模型中layer ...

  7. go error=216编译错误

    CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容.请查看计算机的系统信息,了解是否需要 x86 (32 位)或 x64 (64 位)版本的程序, ...

  8. Loadrunner11录制过程中报错:由于另一个程序正在运行中,此操作无法完成

    第一次安装LR11录制没有问题,第二次录制也没有问题,后面第二天录制就出现了如下截图的现象  报错内容:由于另一个程序正在运行中,此操作无法完成.请选择“切换到”来激活正在运行中的的程序,并更正问题 ...

  9. Zk单机多实例部署

    一.环境准备 当前环境:centos7.3一台软件版本:zookeeper-3.5.2部署目录:/usr/local/zookeeper启动端口:2181,2182,2183配置文件:/usr/loc ...

  10. 如何把ANSYS模型输出为CDB文件并导入FLUENT  【转载】

    转载自: http://linziok99.blog.163.com/blog/static/100157302009320134826/ 在main menu中选择Archive Model ,再点 ...