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

这样经过测试,如果用户没有登陆过系统,输入系统中网址,会自动跳转到登录页面!!

 

posted @ 2015-04-17 12:55  奋斗终生  Views(3269)  Comments(1Edit  收藏  举报