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


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

這樣經過測試,如果用戶沒有登陸過系統,輸入系統中網址,會自動跳轉到登錄頁面!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM