zoukankan      html  css  js  c++  java
  • 利用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')

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

  • 相关阅读:
    Shiro 集成Spring 使用 redis时 使用redisTemplate替代jedisPool(五)
    shiro 实现 网站登录记住我功能 学习记录(四)
    magento2根据属性id或code来添加options
    微信小程序-注册程序app.js
    微信小程序-目录结构
    如何在最新的PHP 7.1.0上安装和运行最新的Magento 2.1.3
    添加新的php版本到wamp中
    全局使用php
    PHP设计模式之单例模式
    SourceTree使用
  • 原文地址:https://www.cnblogs.com/ajianbeyourself/p/4434603.html
Copyright © 2011-2022 走看看