一邀杏、Django 中間件的運行流程
- django的生命周期是:前端請求--->nginx--->uwsgi--->中間件--->url路由---->view試圖--->orm---->拿到數(shù)據(jù)返回給view---->試圖將數(shù)據(jù)渲染到模版中拿到字符串---->中間件--->uwsgi---->nginx---->前端渲染贫奠。
- Django中的中間件是一個輕量級、底層的插件系統(tǒng)望蜡,可以介入Django的請求和響應處理過程,修改Django的輸入或輸出脖律。中間件的設計為開發(fā)者提供了一種無侵入式的開發(fā)方式谢肾,增強了Django框架的健壯性。
- 我們可以使用中間件小泉,在Django處理視圖的不同階段對輸入或輸出進行干預芦疏。
二冕杠、中間件的定義方法
定義一個中間件工廠函數(shù),然后返回一個可以別調用的中間件分预。
中間件工廠函數(shù)需要接收一個可以調用的get_response對象。
返回的中間件也是一個可以被調用的對象薪捍,并且像視圖一樣需要接收一個request對象參數(shù)笼痹,返回一個response對象。
中間件的示例如下:
def middleware(get_response):
# 此處編寫的代碼僅在Django第一次配置和初始化的時候執(zhí)行一次酪穿。
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', # 添加中間件
- 定義一個視圖函數(shù)進行測試在users.py文件下進行定義
def demo_view(request):
print('view 視圖被調用')
return HttpRespon se('OK')
三、多個中間件的執(zhí)行順序
以下是在項目主目錄下settings.py文件下進行
- 在請求視圖被處理前只磷,中間件由上至下依次執(zhí)行
- 在請求視圖被處理后经磅,中間件由下至上依次執(zhí)行
舉例:重新定義一個中間件
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 端口號