Beego之Beego MVC架构介绍

1、beego MVC架构介绍

beego 是一个典型的 MVC 框架,它的整个执行逻辑如下图所示:

在这里插入图片描述

通过文字来描述如下:

1、在监听的端口接收数据,默认监听在 8080 端口。

2、用户请求到达 8080 端口之后进入 beego 的处理逻辑。

3、初始化 Context 对象,根据请求判断是否为 WebSocket 请求,如果是的话设置 Input,同时判断请求的方法

是否在标准请求方法中(GET、POST、PUT、DELETE、PATCH、OPTIONS、HEAD),防止用户的恶意伪造请求

攻击造成不必要的影响。

4、执行 BeforeRouter 过滤器,当然在 beego 里面有开关设置。如果用户设置了过滤器,那么该开关打开,这样

可以提高在没有开启过滤器的情况下提高执行效率。如果在执行过滤器过程中,responseWriter 已经有数据输出

了,那么就提前结束该请求,直接跳转到监控判断。

5、开始执行静态文件的处理,查看用户的请求 URL 是否和注册在静态文件处理 StaticDir 中的 prefix 是否匹配。

如果匹配的话,采用 http 包中默认的 ServeFile 来处理静态文件。

6、如果不是静态文件开始初始化 session 模块(如果开启 session 的话),这个里面大家需要注意,如果你的

BeforeRouter 过滤器用到了 session 就会报错,你应该把它加入到 AfterStatic 过滤器中。

7、开始执行 AfterStatic 过滤器,如果在执行过滤器过程中,responseWriter 已经有数据输出了,那么就提前结

束该请求,直接跳转到监控判断。

8、执行过过滤器之后,开始从固定的路由规则中查找和请求 URL 相匹配的对象。这个匹配是全匹配规则,即如果

用户请求的 URL 是 /hello/world,那么固定规则中 /hello 是不会匹配的,只有完全匹配才算匹配。如果匹配

的话就进入逻辑执行,如果不匹配进入下一环节的正则匹配。

9、正则匹配是进行正则的全匹配,这个正则是按照用户添加 beego 路由顺序来进行匹配的,也就是说,如果你在

添加路由的时候你的顺序影响你的匹配。和固定匹配一样,如果匹配的话就进行逻辑执行,如果不匹配进入 Auto

匹配。

10、如果用户注册了 AutoRouter,那么会通过 controller/method 这样的方式去查找对应的 Controller 和他

内置的方法,如果找到就开始执行逻辑,如果找不到就跳转到监控判断。

11、如果找到 Controller 的话,那么就开始执行逻辑,首先执行 BeforeExec 过滤器,如果在执行过滤器过程

中,responseWriter 已经有数据输出了,那么就提前结束该请求,直接跳转到监控判断。

12、Controller 开始执行 Init 函数,初始化基本的一些信息,这个函数一般都是 beego.Controller 的初始化,不

建议用户继承的时候修改该函数。

13、是否开启了 XSRF,开启的话就调用 Controller 的 XsrfToken,然后如果是 POST 请求就调用

CheckXsrfCookie 方法。

14、继续执行 Controller 的 Prepare 函数,这个函数一般是预留给用户的,用来做 Controller 里面的一些参数初

始化之类的工作。如果在初始化中 responseWriter 有输出,那么就直接进入 Finish 函数逻辑。

15、如果没有输出的话,那么根据用户注册的方法执行相应的逻辑,如果用户没有注册,那么就调用

http.Method 对应的方法(Get/Post 等)。执行相应的逻辑,例如数据读取,数据赋值,模板显示之类的,或者

直接输出 JSON 或者 XML。

16、如果 responseWriter 没有输出,那么就调用 Render 函数进行模板输出。

17、执行 Controller 的 Finish 函数,这个函数是预留给用户用来重写的,用于释放一些资源。释放在 Init 中初始

化的信息数据。

18、执行 AfterExec 过滤器,如果有输出的话就跳转到监控判断逻辑。

19、执行 Controller 的 Destructor,用于释放 Init 中初始化的一些数据。

20、如果这一路执行下来都没有找到路由,那么会调用 404 显示找不到该页面。

21、最后所有的逻辑都汇聚到了监控判断,如果用户开启了监控模块(默认是开启一个 8088 端口用于进程内监

控),这样就会把访问的请求链接扔给监控程序去记录当前访问的 QPS,对应的链接访问的执行时间,请求链接

等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/348852.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】4.LeetCode——杨辉三角

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点&…

idea连接docker

idea 插件无法连接docker问题 原文:idea 插件无法连接docker问题 // 修改docker配置 vi /usr/lib/systemd/system/docker.service // 加上该段配置允许任何ip访问 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock // 重启docker即可 systemctl restart dock…

图像处理------调整色调

什么是色调? 色调,在画面上表现思想、感情所使用的色彩和色彩的浓淡。分为暖色调和冷色调。 from cv2 import destroyAllWindows, imread, imshow, waitKey#创建棕褐色色调 def make_sepia(img, factor: int):pixel_h, pixel_v img.shape[0], img.shap…

OSPF协议解析及相关技术探索(C/C++代码实现)

OSPF(开放最短路径优先)是一种用于自治系统(AS)内部的路由协议,它是基于链路状态算法的。OSPF的设计目的是为了提供一种可扩展、快速收敛和高效的路由解决方案。 OSPF概念和特点 概念 自治系统(AS&#…

二叉树的最大深度[简单]

优质博文:IT-BLOG-CN 一、题目 给定一个二叉树root,返回其最大深度。 二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2&#xff1a…

高水平 ICT 实验实训平台建设

一、平台建设概述 1.1 人工智能仿真实验实训平台 建设高水平 ICT 实验实训平台–人工智能仿真实验实训平台,是为了提供学生在人工智能领域深入学习和实践的机会。承载《人工智能基础》《人工智能应用》《移动机器人技术应用》《视觉开源机器人》《深度学习与神经网…

C. Doremy‘s City Construction(二分图问题)

思路&#xff1a;把集合划分成两部分,一部分中每个数都比另一部分小,这两部分连成一个完全二分图,这种情况是最优的,还需要特判所有数都相等的情况. 代码&#xff1a; void solve(){int n;cin >> n;vector<int>a(n 1);for(int i 1;i < n;i )cin >> a[…

RK3399平台开发系列讲解(PCIE篇)PCIE 配置过程

🚀返回专栏总目录 文章目录 一、硬件拓扑结构二、配置过程演示沉淀、分享、成长,让自己和他人都能有所收获!😄 一、硬件拓扑结构 以下图中的设备的配置过程为例,给大家做示范。 二、配置过程演示 下文中BDF表示Bus,Device,Function,用这三个数值来表示设备。 软件设置…

上海亚商投顾:沪指涨超3%收复2900点 多只中字头股涨停

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日放量反弹&#xff0c;尾盘一度涨超3%&#xff0c;收复2900点关口&#xff0c;深成指涨2%&#xff0c;…

解决Windows系统本地端口被占用

目录 一、被程序占用端口 1.通过终端杀掉占用端口的进程 2.任务管理器 二、被系统列为保留端口 前言&#xff1a; 首先了解为什么会出现端口被占用的情况 端口被占用的情况可能出现的原因有很多&#xff0c;主要有以下几点&#xff1a; 1.多个应用程序同时启动&…

【STM32】STM32学习笔记-硬件SPI读写W25Q64(40)

00. 目录 文章目录 00. 目录01. SPI简介02. W25Q64简介03. SPI相关API3.1 SPI_Init3.2 SPI_Cmd3.3 SPI_I2S_SendData3.4 SPI_I2S_ReceiveData3.5 SPI_I2S_GetFlagStatus3.6 SPI_I2S_ClearFlag3.7 SPI_InitTypeDef 04. 硬件SPI读写W25Q64接线图05. 硬件SPI读写W25Q64示例06. 程序…

FPGA高端项目:Xilinx Artix7系列FPGA多路视频拼接 工程解决方案 提供4套工程源码和技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我已有的FPGA视频拼接叠加融合方案本方案在Xilinx Kintex7 系列FPGA上的应用本方案在Xilinx Zynq7000系列FPGA上的应用 3、设计思路框架视频源选择ov5640 i2c配置及采集动态彩条多路视…

【VSAN数据恢复】VSAN数据重构迁移失败的数据恢复案例

VSAN简介&#xff1a; VSAN存储是一个对象存储&#xff0c;以文件系统呈现给在vSphere主机上。这个对象存储服务会从VSAN集群中的每台主机上加载卷&#xff0c;将卷展现为单一的、在所有节点上都可见的分布式共享数据存储。 对于虚拟机来说&#xff0c;只有一个数据存储&#x…

cg插画设计行业怎么样,如何学习插画设计

插画设计行业是一个充满创意和艺术性的行业&#xff0c;随着数字化时代的不断发展&#xff0c;cg插画的应用范围越来越广泛&#xff0c;市场需求也在逐年增长。以下是一些关于acg插画设计行业的现状和发展趋势&#xff1a; 市场需求不断增长&#xff1a;随着广告、媒体、影视、…

使用Apache POI 创建和读取excel表

目录 1. Apache POI 中文使用手册 1.1 Apache POI 项目介绍 1.2 处理组件 1.2.1 Excel 文件处理组件 1.2.2 Word 文件处理组件 1.2.3 PPT 文件处理组件 1.2.4 文档属性组件 1.2.5 Visio 文件处理组件 1.2.6 Microsoft Publisher 98&#xff08;-2007&#xff09;文件处…

HMI-Board以太网数据监视器(二)MQTT和LVGL

E ∫ d E ∫ k d q r 2 k L ∫ d q r 2 E \int dE \int \frac{kdq}{r^2} \frac{k}{L} \int \frac{dq}{r^2} E∫dE∫r2kdq​Lk​∫r2dq​ E Q 2 π ϵ L 2 E \frac{Q}{2\pi\epsilon L^2} E2πϵL2Q​ Γ ( n ) ( n − 1 ) ! ∀ n ∈ N \Gamma(n) (n-1)!\quad\forall n…

电脑自动开机播放PPT的解决方案

客户有个需求&#xff0c;要求与LED大屏幕连接的电脑定时自动播放PPT。为了安全电脑在不播放的时段&#xff0c;必须关机。 目录 1、使用“时控插座”并进行设置 2、戴尔电脑BIOS设置&#xff08;上电开机&#xff09; 3、设置Windows自动登录 4、任务计划设置 5、启动Au…

嵌入式linux学习之实践操作

​ 前沿 1. 安装交叉编译器 在开发板光盘 A-基础资料->5、开发工具->1、交叉编译器路径下找到 st-example-image-qt wayland-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-snapshot.sh。将它拷贝到 Ubuntu 虚拟机上。 拷贝到 Ubuntu 后&#xff0c;赋予 st-exam…

RabbitMQ死信交换机

目录 1.死信交换机介绍 2.TTL 3.延迟队列 4.消息堆积问题 5.惰性队列 6.代码实战 1.死信交换机介绍 当一个队列中信息满足下列情况之一时&#xff0c;可以成为死信&#xff08;dead letter&#xff09; &#xff08;1&#xff09;消费者使用basic.reject&#xff08;Reject…

Java基础进阶02-xml

目录 一、XML&#xff08;可拓展标记语言&#xff09; 1.学习网站&#xff1a; 2.作用 3.XML标签 4.XML语法 5.解析XML &#xff08;1&#xff09;常见解析思想DOM 6.常见的解析工具 7.DOM4j的使用 8.文档约束 &#xff08;1&#xff09;概述 &#xff08;2&#xf…