add by zhj:html
Django的中間件通常用於處理通用性的問題,分爲五種,按處理順序爲request_middleware,view_middleware,exception_middleware,template_response_middleware,response_middleware,Django貌似爲每種中間件都定義接口,好比request_middleware中間件的接口爲process_request(self, request),咱們增長新的中間件時,只要實現這些接口就能夠了。可參見java
http://djangobook.py3k.cn/2.0/chapter17/spring
https://docs.djangoproject.com/en/1.6/topics/http/middleware/django
原文:http://www.52ij.com/jishu/1174.htmlcookie
最近咱們作的新項目還有一個問題沒有解決,那就是用戶未登陸系統時,不能經過非登陸的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,以下app
# -*- 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')
這樣通過測試,若是用戶沒有登錄過系統,輸入系統中網址,會自動跳轉到登陸頁面!!框架