环境
- win10
- python3.6.6
- django2.1.3
中间件作用 中间件用于全局修改django的输入或输出。
中间件常见用途
- 缓存
- 会话认证
- 日志记录
- 异常
中间件执行流程
全局异常捕捉实现
创建django项目&添加app
1
2
3
|
django - admin startproject middleware cd middleware django - admin startapp app |
添加app到项目
1
2
3
4
5
|
# middleware/settings.py # installed_apps最后添加 app installed_apps = [ 'app' , ] |
编辑中间件并添加到项目
注:中间件注册访问有一定的关联性,位置不可以随意放
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 创建app/middleware.py并编辑 from django.http import jsonresponse class custommiddleware: def __init__( self , get_response): print ( "程序启动时执行, 只执行一次" ) self .get_response = get_response def __call__( self , request): print ( "中间件开始" ) response = self .get_response(request) print ( "中间件结束" ) return response def process_view( self , request, view_func, view_args, view_kwargs): print ( "请求实际函数前执行" ) def process_exception( self , request, exception): print ( "程序异常时执行" ) return jsonresponse({ "msg" : exception.args[ 0 ], "code" : - 1 }) |
编辑middleware.setttings.py
1
2
3
4
|
middleware = [ ... 'app.middleware.custommiddleware' ] |
编写一个异常
1
2
3
4
5
6
7
8
|
# app/views.py from django.http import jsonresponse def json_response(request): print ( 'json_response' ) err = 3 / 0 return jsonresponse({ "msg" : "ok" , "code" : 0 }) |
添加到路由
1
2
3
4
5
6
7
8
|
# middleware/urls.py from app.views import json_response, view_response urlpatterns = [ ... path( "view" , view_response) ] |
运行测试
访问: http://127.0.0.1:8000/json/
结果
另一个觉用途日志记录
1
2
|
# 在中间件函数process_view中添加 print ( "path: {}; method: {}; data: {}" . format (request.get_full_path(), request.method, request.body or '')) |
参考:https://docs.djangoproject.com/zh-hans/2.1/topics/http/middleware/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.jianshu.com/p/0b35e71a8483