編寫一箇中間件

上次說到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文件裏寫過多的代碼。比如訪問限制、黑白名單等等。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章