一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Django框架中間件(Middleware)用法實例分析

Django框架中間件(Middleware)用法實例分析

2021-06-29 00:171257309054 Python

這篇文章主要介紹了Django框架中間件(Middleware)用法,結合實例形式分析了Django框架中間件(Middleware)的功能、用法及相關操作技巧,需要的朋友可以參考下

本文實例講述了Django框架中間件(Middleware)用法。分享給大家供大家參考,具體如下:

1、面向切面編程

  • 切點(鉤子)
  • 切點允許我們動態的在原有邏輯中插入一部分代碼
  • 在不修改原有代碼的情況下,動態注入一部分代碼
  • 默認情況,不中斷傳播,切點會自動愈合(自動執行原有邏輯)
  • 如果我們執行了中斷操作(return,raise),沒接上,會直接到程序結尾
  • 五個切面:1、請求交給路由處理之前;2、請求交給視圖處理之前;3、請求交給視圖渲染后;4、渲染結果返回給模板之前;5、出現異常。

2、Django中的中間件

  • 框架內置切點
    • init
    • 沒有參數,服務器響應第一個請求的時候自動調用,用戶確定是否啟用該中間件
    • process_request(self,request)
    • 在執行視圖前被調用,每個請求上都會調用
    • 不返回或返回HttpResponse對象
    • process_view(self,request,view_func,view_args,view_kwargs)
    • 調用視圖之前執行,每個請求都會調用
    • 不返回或返回HttpResponse對象
    • process_template_response(self,request,response)
    • 在視圖剛好執行完后進行調用,每個請求都會調用
    • 不返回或返回HttpResponse對象
    • process_response(self,request,response)
    • 所有響應返回瀏覽器之前調用,每個請求都會調用
    • 不返回或返回HttpResponse對象
    • process_exception(self,request,exception)
    • 當視圖拋出異常時調用
    • 不返回或返回HttpResponse對象
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.urls import reverse
from django.utils.deprecation import MiddlewareMixin
from MidUpVcode.settings import BLACK_LIST, VIP_LIST
'''
所有的鉤子函數都可以返回一個Response
一旦鉤子函數返回了Response,整個請求的受理就結束了
'''
# 繼承于框架中間件
class MyappMiddleware(MiddlewareMixin):
 # 中間件的初始化方法,全局執行一次
 # def __init__(self, get_response=None):
 #   super(MyappMiddleware, self).__init__()
 #   print(">>>>>>>>>> MyappMiddlware __init__")
 # 下鉤子于所有路由被交給路由表之前
 def process_request(self, request):
   # 獲取客戶端IP地址
   clientIp = request.META['REMOTE_ADDR']
   # 請求的路由
   url = request.path
   print(">>> process_request", request, clientIp, url)
   # # 屏蔽黑名單用戶
   # 只要客戶端IP在黑名單中
   # if clientIp in BLACK_LIST:
   #   直接渲染fuckoff.html并立刻返回
   #   return render(request,'fuckoff.html')
   # # 當VIP用戶訪問福利頁面時提供更多好的服務
   # if clientIp in VIP_LIST and url=='/myapp/fuli/':
   #   return render(request, 'fuli.html', context={'imgpath': 'meinv1.jpg'})
   # 福利頁必須登錄了才能查看
   if url == '/myapp/fuli/' and not request.session.get('uname', None):
     return redirect(reverse('myapp:login'))
 # 下鉤子于所有路由請求被交給視圖函數之前
 def process_view(self, request, view_func, view_args, view_kwargs):
   print(">>> process_view", request, view_func, view_args, view_kwargs)
 # 理論上下鉤子于所有路由請求的模板被渲染完成以后
 # 這個函數實測無法回調
 def process_template_response(self, request, response):
   print(">>>>>>>>>> process_template_response", request, response)
   return response
 # 下鉤子于所有路由的響應被返回之前
 def process_response(self, request, response):
   print(">>>>>>>>>> process_response", request, response)
   return response
 def process_exception(self, request, exception):
   print(">>>>>>>>>> process_exception", request, exception)
   return redirect('/')

3、自定義中間件

  • 用途
    • 統計
    • 黑名單
    • 白名單
    • 反爬(redis)
    • 界面友好化(捕獲異常)
  • 流程
    • 在工程目錄下創建middleware目錄

Django框架中間件(Middleware)用法實例分析?

  • 繼承MiddleWareMixin
?
1
2
3
class LearnAOP(MiddlewareMixin):
  def process_request(self,request):
    print('request的路徑',request.GET.path)
  • 覆寫切點方法,實現自己的功能
  • 如果我們邏輯中沒有返回值,那么程序執行的時候會按照原有邏輯執行
  • 如果我們做出了返回,那么程序將會從切點處切開,直接回到瀏覽器
  • 在settings中進行注冊
?
1
2
3
4
5
6
MIDDLEWARE = [
  ...
  # 注冊自定義的中間件
  'middleware.MyMiddleware.MyappMiddleware',
  ...
]

希望本文所述對大家基于Django框架的Python程序設計有所幫助。

原文鏈接:https://blog.csdn.net/lm_is_dc/article/details/80527298

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 人体欣赏孕妇季玥图片 | 为什么丈夫插我我却喜欢被打着插 | 国产99久久精品一区二区 | 精品一区二区三区免费视频 | 久久久久琪琪精品色 | 欧美在线视频一区二区 | 激情影院网站 | 亚洲 欧美 日韩 国产 视频 | 亚洲成在人网站天堂一区二区 | 日韩手机在线视频 | 国产香蕉一区二区在线观看 | 亚洲AV 无码AV 中文字幕 | 4438全国最大成人网视频 | 好姑娘在线完整版视频 | yellow字幕网在线zmzz91 | 日本视频中文字幕 | 日韩免费毛片视频杨思敏 | 国产福利在线观看第二区 | 深夜草莓视频 | 99热这里只有精品久久免费 | 国模孕妇季玥337p人体 | 国产女主播在线播放一区二区 | 99免费精品| 精品一区视频 | 四虎成人4hutv影院 | 91麻豆影视 | 欧美艳星julnaann | 99精品视频一区在线观看miya | 日本大片在线 | 2012手机在线中文字幕 | 97视频免费人人观看人人 | 亚洲精品国产SUV | 精品一区二区三区在线播放 | 秘书在办公室疯狂被hd | 国产成人看片免费视频观看 | 大学第一次基本都没了 | 亚州男人天堂 | 亚洲上最大成网人站4438 | 色男人网 | 成人国产第一区在线观看 | 亚洲欧洲日产国码天堂 |