一、Django 中间件的运行流程
- django的生命周期是:前端请求--->nginx--->uwsgi--->中间件--->url路由---->view试图--->orm---->拿到数据返回给view---->试图将数据渲染到模版中拿到字符串---->中间件--->uwsgi---->nginx---->前端渲染。
- Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
- 我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。
二、中间件的定义方法
-
定义一个中间件工厂函数,然后返回一个可以别调用的中间件。
-
中间件工厂函数需要接收一个可以调用的get_response对象。
-
返回的中间件也是一个可以被调用的对象,并且像视图一样需要接收一个request对象参数,返回一个response对象。
-
中间件的示例如下:
def middleware(get_response):
# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
def middleware(request):
# 此处编写的代码会在每个请求处理视图前被调用。
response = get_response(request)
# 此处编写的代码会在每个请求处理视图之后被调用。
return response
return middleware
- 例如,在users应用中新建一个middleware.py文件
def my_middleware(get_response):
print('init 被调用')
def middleware(request):
print('before request 被调用')
response = get_response(request)
print('after response 被调用')
return response
return middleware
'users.middleware.my_middleware', # 添加中间件
- 定义一个视图函数进行测试在users.py文件下进行定义
def demo_view(request):
print('view 视图被调用')
return HttpRespon se('OK')
三、多个中间件的执行顺序
以下是在项目主目录下settings.py文件下进行
- 在请求视图被处理前,中间件由上至下依次执行
- 在请求视图被处理后,中间件由下至上依次执行
举例:重新定义一个中间件
def my_middleware2(get_response):
print('init2 被调用')
def middleware(request):
print('before request 2 被调用')
response = get_response(request)
print('after response 2 被调用')
return response
return middleware
四、知识点补充
1、如果开启django的时候端口被占用,可用下面的方式来查看端口的情况。
ps -e | grep python
2、杀死被占用的端口
kill -9 端口号
网友评论