利用Django中間件middleware解決用戶未登陸問題(轉)

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')

這樣通過測試,若是用戶沒有登錄過系統,輸入系統中網址,會自動跳轉到登陸頁面!!框架

相關文章
相關標籤/搜索