[Django学习]中间件
2023-09-11 14:16:50 时间
中间件
- 是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出
- 激活:添加到Django配置文件中的MIDDLEWARE_CLASSES元组中
- 每个中间件组件是一个独立的Python类,可以定义下面方法中的一个或多个
- _init _:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件
- process_request(request):执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
- process_view(request, view_func, view_args, view_kwargs):调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
- process_template_response(request, response):在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象
- process_response(request, response):所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象
- process_exception(request, exception):当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
- 使用中间件,可以干扰整个处理过程,每次请求中都会执行中间件的这个方法
- 示例:自定义异常处理
- 与settings.py同级目录下创建myexception.py文件,定义类MyException,实现process_exception方法
class MyException(MiddlewareMixin):
def process_exception(self, request, exception):
return HttpResponse(exception.message)
- 将类MyException注册到settings.py中间件中
MIDDLEWARE_CLASSES = (
'test1.myexception.MyException',
...
)
- 定义视图,并发生一个异常信息,则会运行自定义的异常处理
注:django 1.10之后产生了较大变化
参考:https://www.cnblogs.com/zhaof/p/6281541.html
views函数里面想用print在控制台下打印中文信息,乱码问题:
因为Django默认是utf-8,系统不定。
type = sys.getfilesystemencoding()
print("中间件1请求".decode('utf-8').encode(type))
相关文章
- Django+Nginx概念安装和使用–使用Django建立你的第一个网站
- Django模板的加深
- django之创建第10个项目-图片上传方式1
- django之创建第7-4个项目-配置views文件实现url传值
- 最优Django环境配置
- 基于Django的独立运行脚本开发
- 「基于Python技术的智慧中医商业项目」Django前端系统配置
- Django 4.x CSRF 站点保护示例和使用配置方法
- python 之django (一) Windows环境下Django 1.6.11开发环境搭建(简易版)
- Django+xadmin打造在线教育平台(九)
- Django+xadmin打造在线教育平台(三)
- Python学习---django知识补充之CBV
- Python学习---django之ORM语法[对象关系映射]180124
- Django路由系统---django重点之url映射分发
- Django: 使用django-rest-framework-jwt时自定义user表(且未继承auth.user表)
- Django前后端使用json传递入参
- django:bootstrap table加载django返回的数据
- django部署
- django+echarts
- Django之静态文件(十九)