add by zhj:
Django的中間件一般用於處理通用性的問題,分為五種,按處理順序為request_middleware,view_middleware,exception_middleware,template_response_middleware,response_middleware,Django貌似為每種中間件都定義接口,比如request_middleware中間件的接口為process_request(self, request),我們增加新的中間件時,只要實現這些接口就可以了。可參見
http://djangobook.py3k.cn/2.0/chapter17/
https://docs.djangoproject.com/en/1.6/topics/http/middleware/
原文:http://www.52ij.com/jishu/1174.html
最近我們做的新項目還有一個問題沒有解決,那就是用戶未登錄系統時,不能通過非登錄的url直接進入系統,之前用java做的項目記得struts2有過濾器,還用過spring MVC的攔截器,其實這些都是filter的組件,這樣很容易實現所需的功能,然而目前項目用的django框架,經研究,Django里面有沒有類似filter的組件。遺憾的是,並未發現Django中有類似過濾器或者攔截器的概念。然而,Django提供了功能或許更為強大(至少是不弱於)這些概念的新東西:middleware。
經過查資料,終於實現了這個功能,我寫了這樣的一個middleware,它攔截所有訪問非login頁面的請求,檢測其cookie,並判斷將請求轉向login頁面或者其請求的頁面。 具體做法如下:
(1)首先我自己先創建了一個app,命名為mymiddleware,並在里面添加了一個mymiddleware.py
(2)在settings.py中配置加載這個中間件,首先在配置文件的INSTALLED_APPS末尾加一個 'mymiddleware',在MIDDLEWARE_CLASSES的末尾加上 'mymiddleware.mymiddleware.QtsAuthenticationMiddleware',
(3)具體寫mymiddleware.py,如下
# -*- coding:utf-8 -*- ''' Created on 2015-04-02 @author: anonymous ''' #標准模塊 from urllib import quote #第三方模塊 from django.http import HttpResponseRedirect from django.contrib.auth import SESSION_KEY #自定義模塊 class QtsAuthenticationMiddleware(object): def process_request(self, request): if not request.user.is_authenticated(): return HttpResponseRedirect('/user_auth/login')
這樣經過測試,如果用戶沒有登陸過系統,輸入系統中網址,會自動跳轉到登錄頁面!!