您的位置:首页 > 编程语言 > Go语言

关于django中间件的知识

2014-08-13 11:45 393 查看
这两天在看django中间件的一些知识。深有感触。

以前用Python写的一个的装饰器用来做权限管理,在没看中间件的知识之前,用起来还不错,看来以后,觉得还是MiddleWare强大(只限于本应用场景),不用在每一个函数钱用装饰器进行限制,只需写好一段中间件函数,它会自动在request前进行执行,进行全局控制。

中间件的安装:在setting中,

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.cache.CacheMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
<span style="color:#ff0000;">'myapp.MyMiddleWare.TestMiddleware'</span>
)


按照官网的讲解,CacheMiddleWare必须在SessionMiddleware和AuthenticationMiddleware之下。红字之处的意思是将自己定制的中间件添加到项目中

下面介绍关于Request预处理函数:这个方法的调用时机是在Django接收到request之后,但仍未解析URL以确定应当运行的view之前。

process_request(self, request) :
........


process_request() 应当返回 None 或 HttpResponse 对象.

如果返回 None , Django将继续处理这个request,执行后续的中间件, 然后调用相应的view.

如果返回 HttpResponse 对象, Django 将不再执行 任何 其它的中间件(而无视其种类)以及相应的view。 Django将立即返回该 HttpResponse .

此外,还有其他几种处理函数:

View预处理函数:process_view(self,request,view,args,kwargs),这个方法的调用时机在Django执行完request预处理函数并确定待执行的view之后,但在view函数实际执行之前。
Response后处理函数:process_response(self,request,response),这个方法的调用时机再Django执行view函数并生成response之后。
Exception后处理函数process_exception(self,request,exception),在request处理过程中出了点问题并且view函数抛出了一个未捕获的异常时才会被调用

在将自己编写的中间件函数写好以后,就能使用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: