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

这样通过测试,若是用户没有登录过系统,输入系统中网址,会自动跳转到登陆页面!!框架

相关文章
相关标签/搜索