随笔分类 - Go - Revel框架介绍
revel是一个基于MVC的高性能web框架
摘要:山坡网的用户抱怨“为什么搜索‘二鬼子李富贵’找不到‘二鬼子汉奸李富贵’?我用百度搜都能找到。” 当时我就滴汗了,用户说的有道理,应该要能搜索到。 之前的方案很简单,用户输入的字串会在数据库里做正则表达式匹配,以便用“二鬼子”能搜到“二鬼子汉奸李富贵”。事实证明,我想当然了,即便是这么简单的一个书名搜索,也不能马虎。 那就来分析一下怎么做吧,即便不是专业做搜索的,思路上也可以先YY一下。按照本...
阅读全文
摘要:CSRF是什么?请看这篇博文“浅谈CSRF攻击方式”,说的非常清楚。现在做网站敢不防CSRF的我猜只有两种情况,一是没什么人访问,二是局域网应用。山坡网之前属于第一种情况,哈哈,所以至今没什么问题。但昨天突然发现了有人开始扫url,估计用的是个工具,很整齐的扫了一大片知名框架和数据库管理工具的管理员登陆url。还好我们没有使用其中的任何一个,侥幸没事。但这也给我敲响了警钟,互联网上那是危机重重啊。于是第一步就开始加上CSRF保护,搞起来还是花费了些时间,暗叹这种事情还是刚开始就做最容易。好,动手。获取revel-csrf包。go get github.com/cbonello/revel-cs
阅读全文
摘要:所有的网站应该都会有一个非常简单的需求,首页一秒之内打开。 满足的方式主要有两种: 页面静态化,效果最好,对服务器基本没负担,只要带宽足够就好了。我知道一个PV过亿的站点就是全站静态(以前新浪也是),据说早就想换成动态的,可以省很多事儿,但至今仍然没有成功。 数据内存化,把常用的数据全都放到内存,定期分批写入硬盘。相比静态页面,这个方法对CPU的要求稍高。好处就不细说了,动态网页的好处相比大...
阅读全文
摘要:由于revel框架本身对于model层的编写没有提供任何指导,所以在设计这部分的时候就有些犹豫,反复斟酌到底怎样才算是最佳实践。 我在做山坡网的时候刚开始也纠结了一下,拿不准mongodb的session的创建和销毁应该在什么地方处理。直到有一天看到了revmgo的作者在与revel的作者讨论(具体内容在这里),就去研究了下revmgo,之后立即就用它替换了我自己的实现。 先说下用法吧。 1...
阅读全文
摘要:一个站点上面最基本都会有三种用户角色,未登录用户、已登录用户和管理员。这一次我们就来看看在revel框架下如何进行权限控制。因为revel是MVC结构的,每一个url其实都会映射到一个具体的Controller.Action上面,所以权限控制落到实处就是对Action的访问进行控制。那么思路是如下:1. 有一个方法能够判定当前是什么角色。2. 有一地方定义了每一个Action的访问权限要求。3. 有一个方法能够在调用所有Action之前被调用,而且能够判定是否还要继续调用Action。我们一项一项来解决。存储当前用户的角色信息先定义一个角色类型如下。type Role intconst ( .
阅读全文
摘要:用户注册、登录和注销是任何一个网站都必然会有的功能,可以说,这是重新造轮子做多的领域,每个做网站的人应该都做过很多遍。见微知著,从这么一个小功能其实就可以看到所使用的web框架中的大部分东西。今天就让我们用这个基本模块来看看revel吧。先整理一下我们选用的技术框架和组件:web框架:revel数据库:mongodb数据库driver:mgo工欲善其事,必先利其器,这里着重推荐一个mongodb的GUI客户端 - mongovue,可以说,如果没有这个工具,在开发的过程中我们会痛苦许多许多。这里假设你已经有了对Go语言最基本的知识,已经配置好GOROOT和GOPATH。首先,在GOPATH下面
阅读全文
摘要:在工作了10年之后,我于32岁的年纪在两个月前辞职创业了。 简单介绍一下之前的整个职业生涯,挺典型的,工程师 –> 资深工程师 –> 架构师 –> 项目经理 –> 部门经理,可以说,产品研发过程中的所有角色我都走了一遍,任职的公司也越来越大,可是内心的不安确实与日俱增,总觉得这一身本事渐渐被淹没在了办公室的各种琐碎之中,心中想要做一款好产品的梦想似乎越来越远了。 于是,我打定了主意,要创业。但...
阅读全文