Django编写中间件实现url自定义过滤

转载过程中,图片丢失,代码显示错乱。

为了更好的学习内容,请访问原创版本:

http://www.missshi.cn/api/view/blog/59a6aec3e519f50d040000f2

Ps:初次访问由于js文件较大,请耐心等候(8s左右)



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

而项目本身是基于Django的。

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

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

 

什么是中间件?

在Django中,Middleware指的是在

1. Request->View

2. View->Response

之间的桥梁插件。

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

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

 

Django中间件

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

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

 
  
1
2
3
4
5
' 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文件的中间件中添加一行,具体内容为完成的类路径,例如:

1
util.loginMiddleware.MyLoginMiddleware

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

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

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

1
2
3
4
5
6
7
8
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
#returnHttpResponseRedirect("/login")#

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

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


更多更详细的内容,请访问原创网站:

http://www.missshi.cn/api/view/blog/59a6aec3e519f50d040000f2

Ps:初次访问由于js文件较大,请耐心等候(8s左右)


 

你可能感兴趣的:(python)