上次说到django的中间件,这次就来写一个。这次就是通过中间件来做一个类似于日志的记录。


一、创建一个中间件目录与中间件文件

    中间件目录是Middle,log.py是中间件文件

wKioL1lJ3CKwBuMfAAANjSryovs678.png

现在来看看log.py文件:

wKiom1lJ3IGRD6k0AACDpeM3Zkc696.png

也许写的比较low,就是想要记录一下访问项目的时间,ip,请求方式,请求url,返回的状态码。

class Row1(MiddlewareMixin):
    def process_request(self,request):
        if request.META.has_key('HTTP_X_FORWARDED_FOR'):
            ip = request.META['HTTP_X_FORWARDED_FOR']
        else:
            ip = request.META['REMOTE_ADDR']
        u = request.path_info
        m = request.method
        subfolder = time.strftime("%Y%m%d")
        e = str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
        path = str('log/' + subfolder +'.log')
        f = open(path,'a+')
        f.write( '['+e + ']'+'\t'+ m + '\t'+ u + '\t'+ ip +'\t')
        f.close()
    def process_response(self,request,response):
        subfolder = time.strftime("%Y%m%d")
        path = str('log/' + subfolder + '.log')
        status = str(response.status_code)
        f = open(path, 'a+')
        f.write(status + '\n')
        f.close()
        return response

当然,要创建这个log目录:

wKiom1lJ33XiPHZBAAAceR1PZkw913.png


二、将这个中间件加入到django里

    想要这个中间件生效,还需要在django的settings.py文件里加入这个中间件配置,在MIDDLEWARE里加入'Middle.log.Row1',

wKiom1lJ3h7Amm_9AAA7_iqkIsQ058.png


三、测试

访问网站,在log目录下就会生成以日期为命名的.log文件,文件内容为:

wKiom1lJ4BHgtCDuAABFwWmxXB0870.png


四、总结

通过上面,我们可以编写各种你需要的中间件,来更完善你的项目,同样也避免了在views.py文件里写过多的代码。比如访问限制、黑白名单等等。。