您的位置:首页 > 编程语言 > Go语言

django框架中,添加用户操作记录和查询功能

2015-07-06 14:58 561 查看


1. Django框架中Request/Response处理流程(铺垫)

django的核心在于中间件middleware,django所有的请求、返回都由中间件来完成。

中间件,就是处理HTTP的request和response的,类似插件,比如有Request中间件、view中间件、response中间件、exception中间件等,

Middleware都需要在 “project/settings.py” 中 MIDDLEWARE_CLASSES 的定义。大致的程序流程图如下所示:




图1. django 请求处理流程图


首先,Middleware需要在 “project/settings.py” 中 MIDDLEWARE_CLASSES注册, 一个HTTP请求,将被这里指定的中间件从头到尾处理一遍, 暂且称这些需要挨个处理的中间件为处理链,如果链中某个处理器处理后没有返回response,就把请求传递给下一个处理器;如果链中某个处理器返回了response,
直接跳出处理链由response中间件处理后返回给客户端,可以称之为短路处理。

2. 操作事件的记录

如图1所示,我们自定义中间件”RecordEventMiddleWare“,分别在“入口记录”和“出口记录”处对每个请求的ULR进行过滤; 请求的URL在request中对应字段是:
request.META['REQUEST_URI'],web当前登录用户对应字段: request.user ,操作记录中我们呢将其定义为事件的操作者。解析出请求或者请求处理结果后,将其插入数据库,完成记录,查询自然就是读取数据库咯。

2.1 入口记录: def process_view(self, request, view, args, kwargs) :

匹配到我们需要记录的请求的URL后,读取请求的具体内容, 对应字段是:request.body; 它的格式是纯文本字符串,我们约定的参数格式是json串,此处作json串解析(json.loads(request.body)),得到参数字典。然后具体需要记录啥参数,就解析啥参数。

2.2 出口记录: def process_response(self, request, response) :

同样根据request的URL字段进行过滤,我们的response内容也是json格式,类似于request的内容字段,它的内容字段是response.content,同样需要作json串解析: json.loads(response.content)。

我们约定的response包含一个success关键字,标记请求是否成功,另外如果请求处理失败,message关键字对应的给出了失败原因,还有就是可能包括一些必要的返回结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: