Django编写中间件实现url自定义过滤
2017-08-12T0    2912    0    0

目前在公司内容,有一些项目需要接入安全登录认证。

而项目本身是基于Django的。

查阅一些资料后,发现一些比较好的方式是编写中间件(Middleware)。

本文主要讲解如何在Django项目中编写中间件来实现自定义的登录认证服务。


什么是中间件?

在Django中,Middleware指的是在

1. Request->View

2. View->Response

之间的桥梁插件。

Django中,支持的中间件可以实现如下四个方法,对应的生命周期分别如下:

方法名称执行时机
process_request接收到request之前,但在确定view之前
process_view确定view之后,但在真正执行view之前
process_response执行view之后
process_exceptionview抛出异常后执行


Django中间件

Django中,在settings.py文件中,添加中间件。

Django中默认添加的中间件如下:

    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',

那么如下添加自定义的中间件呢?、

Step1:在settings.py文件的中间件中添加一行,具体内容为完成的类路径,例如:

util.loginMiddleware.MyLoginMiddleware

Step2:在util文件夹中创建一个loginMiddleware.py的文件。

Step3:在该文件中实现一个MyLoginMiddleware类。具体可以包含上述提到的四种方法。

本例中,我们以process_request为例进行讲解:

from django.http import HttpResponseRedirect  

class MyLoginMiddleware:  
  
    def process_request(self, request):  
        if 'user' not in request.session or not request.session['user']:  
            return HttpResponseRedirect("http://www.baidu.com")  #跳到外部网站需要加http的完整路径
            # return HttpResponseRedirect("/login") #本网站内部跳转仅需要相对路径

此时,我们验证的内容是如果Session中没有包含登录的信息,那么我们将跳转至百度的首页!

当然,你也可以调整至别的页面,例如你的登录页面。


上一篇:

下一篇: Django安装及配置Oracle数据库

0条评论