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

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

时间: 2024-08-05 21:13:05

利用Django中间件middleware解决用户未登录问题(转)的相关文章

用户未登录或Session超时时重定向到登录页,不那么简单

在网站开发中,我们经常有这样的场景出现: 情景1:对未登录的用户或没有权限的用户,当其想访问某个受限网页时,系统要能够自动转到登录页面.   情景2:对于用session保存用户状态的情况还有这样一种需求,当用户的session已超时时,用户再想执行操作时,也要将其转到登录页面.   在asp.net中,要实现上述的功能容易吗?有人会说:"这太容易了,可以通过下面两种方式实现".   方法一:直接调用asp.net中的response.redirect方法实现 response.red

利用django中间件CsrfViewMiddleware防止csrf攻击

一.在django后台处理 1.将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项目中会自带的. MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middle

Django中间件MiddleWare

一.什么是中间件 中间件是一个用来处理Django的请求和响应的框架级别的钩子. 中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法. 我们一直都在使用中间件,只是没有注意到而已,打开Django项目的Settings.py文件,看到下图的MIDDLEWARE配置项. MIDDLEWARE配置项是一个列表,列表中是一个个字符串,这些字符串其实是一个个类,也就是一个个中间件. MIDD

servlet+jsp实现过滤器,防止用户未登录访问

我们可能经常会用到这一功能,比如有时,我们不希望用户没有进行登录访问后台的操作页面,而且这样的非法访问会让系统极为的不安全,所以我们常常需要进行登录才授权访问其它页面,否则只会出现登录页面,当然我的思路: 一种是在jsp页面进行session的判断,如果不存在该用户的session,就跳转到登录页面,否则执行jsp页面代码,但是你会发现这样做逻辑也简单,但是非常麻烦,如果有很多个jsp,那么就要写多个判断 另一种则是利用过滤器,访问页面时都进行过滤验证,如果存在该用户session,则访问该页面

jsp中用户未登录,防止其他链接访问

方法1:  用session 方法2 :  用filter 方法1:  在处理登录的servlet中写如下语句 //设置session的失效时间单位为 秒 request.getSession().setMaxInactiveInterval(1*60); (还可以在web.xml中写如下语句,设置失效时间.不过前者优先级别高. <session-config> <session-timeout>1</session-timeout> <!-- 单位为分钟 --&

细说Django中间件 (middleware)

中间件是处理django的请求和响应的框架级别的钩子,本质是一个类(直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作) 由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能. 定义的中间件需要注册 django中请求响应流程 1.中间件定义的五个方法: process_request(self,request) process_response(self, request, response) process_view(self, request, view_fun

利用CRM中间件Middleware从ERP下载Customer Material的常见错误

使用事务码VD51和VD52创建和修改Customer Material.下图是我在ERP创建的Material,为其维护了一个Customer Material AOP. 当下载到CRM后,在WebClient UI上显示如下: 下载Customer Material的主要配置: 通过表KNMT的字段KUNNR指定待下载的Customer ID: 将ERP的Material 1427先下载到CRM 常见错误 错误消息Number not in interval XXX - XXX when d

Django中间件拦截未登录url

1.利用装饰器在视图中拦截未登录的url @login_required(login_url='/user/login/') def homepage(request): pass 这种方法适合于程序中只有少数几个需要登录拦截的url. 2. 利用中间件技术拦截未登录的url 2.1 在settings.py添加MIDDLEWARE设置:middleware.LoginCheckMiddleware MIDDLEWARE = [ 'django.middleware.security.Secur

利用 Django REST framework 编写 RESTful API

利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framework 真乃一大神器,可以轻易的甚至自动化的搞定很多事情,比如: 自动生成符合 RESTful 规范的 API 支持 OPTION.HEAD.POST.GET.PATCH.PUT.DELETE 根据 Content-Type 来动态的返回数据类型(如 text.json) 生成 browserable