类视图与中间件
类视图类视图引入
以函数的方式定义的视图成为函数视图,函数视图便于理解,但是遇到一个视图对应的路径提供了多种不同 HTTP 请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳。
比如说增删改查请求是一个链接的时候
在 Django 中也可以使用类来定义一个视图,称为类视图
使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义。
类视图的好处:
代码可读性好
类视图相对于函数视图有更高的复用性,如果其他地方需要用到某个类视图的某个特定逻辑,直接继承该类视图即可
类视图使用
定义类视图需要继承自Django提供的父类View,可使用或者导入,定义方式如上所示。
配置路由时,使用类视图的as_view()方法来添加。
类视图使用装饰器
在不违背开放封闭的前提下添加新功能
在 URL 配置中装饰
这种方式最简单,不过装饰行为在 url 配置中,不方便代码阅读,不建议使用
使用此种方式会为类视图中的所有请求方式都加上装饰器行为
在类视图中装饰
如果需要为类视图的多个方法添加装饰器,但又不是所有的方法,可以直接在需要添加装饰器的方法上使用 method_decorator
method_decorator 装饰器使用 name 参数指明被装饰的方法
在类视图中使用为函数视图准备的装饰器时,不能直接添加装饰器,需要使用method_decorator将其转换为适用于类视图方法的装饰器。
类视图Mixin扩展类
使用面向对象多继承的特性,可以通过定义父类(作为扩展类),在父类中定义想要向类视图补充的方法,类视图继承这些扩展父类,便可实现代码复用。
定义的扩展父类名称通常以Mixin结尾。
中间件
Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。
中间件的定义方法
中间件的代码格式和装饰器很像,都是在添加功能,
执行顺序:
在请求视图被处理前,中间件由上至下依次执行
在请求视图被处理后,中间件由下至上依次执行
定义一个中间件工厂函数,然后返回一个可以别调用的中间件。
中间件工厂函数需要接收一个可以调用的get_response对象。
返回的中间件也是一个可以被调用的对象,并且像视图一样需要接收一个request对象参数,返回一个response对象。
定义好中间件后,需要在settings.py 文件中添加注册中间件
领取专属 10元无门槛券
私享最新 技术干货