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关键字对应的给出了失败原因,还有就是可能包括一些必要的
返回结果。