成都网站建设设计

将想法与焦点和您一起共享

深入了解Django中间件及其方法-创新互联

前言

站在用户的角度思考问题,与客户深入沟通,找到德钦网站设计与德钦网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站制作、成都网站制作、企业官网、英文网站、手机端网站、网站推广、域名注册网站空间、企业邮箱。业务覆盖德钦地区。

我们可以给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面等等。我们通过给几个特定视图函数加装饰器实现了这个需求,但是以后添加的视图函数可能也需要加上装饰器,这样是不是稍微有点繁琐。

因此,我们可以使用更适宜的方式来实现类似给所有请求都做相同操作的功能了——中间件.

什么是中间件?

官方的说法:

==中间件是一个用来处理Django的请求和响应的框架级别的钩子==。它是一个轻量、低级别的插件系统,用于在==全局范围内==改变Django的输入和输出。每个中间件组件负责做一些特定的功能。

由于其影响的是全局,所以需要谨慎使用,==使用不当会影响性能==。

说的直白一点,中间件可以帮助我们==在视图函数执行之前和执行之后做一些额外的操作==。

==它的本质是一个自定义类==,类中定义了几个方法,Django框架会在请求的特定时间去执行这些方法。

打开Django项目的Settings.py文件,看到下图的MIDDLEWARE配置项:

深入了解Django中间件及其方法

MIDDLEWARD配置项是一个列表,列表中是一个个字符串,这些字符串其实是一个个类,也就是一个个中间件。

自定义中间件

中间件可以定义五种方法,分别是:

  • process_request(self, request)
  • process_view(self, request, view_func, view_args, view_kwargs)
  • process_template_response(self, request, response)
  • process_exception(self, request, exception)
  • process_response(self, request, response)

以上方法的返回值可以是None,或者是一个HttpResponse对象,如果是None,则继续按照django定义的规则向后继续执行,如果是HttpResponse对象,则直接将改对象返回给用户。

重点理解process_request 与 process_response.
***

示例

from django.utils.deprecation import MiddlewareMixin


class MD1(MiddlewareMixin):

  def process_request(self, request):
    print("我是MD1的process_request方法")

  def process_response(self, request, response):
    print("我是MD1的process_response方法")
    return response


class MD2(MiddlewareMixin):

  def process_request(self, request):
    print("我是MD2的process_request方法")

  def process_response(self, request, response):
    print("我是MD2的process_response方法")
    return response

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:深入了解Django中间件及其方法-创新互联
当前网址:http://chengdu.cdxwcx.cn/article/gjdpd.html