中間件
問題1:中間件的背后的設(shè)計理念是什么?(分離橫切關(guān)注功能/攔截過濾器模式)
問題2:中間件有哪些不同的實現(xiàn)方式(參考下面代碼)
問題3:描述Django內(nèi)置的中間件及其執(zhí)行順序冲甘。(推薦閱讀:Django官方文檔 - 中間件 - 中間件順序
)
激活中間件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'common.middlewares.block_sms_middleware',
]
自定義中間件
def simple_middleware(get_response):
def middleware(response, *args, **kwargs)
response = get_response(resquest, *args, **kwargs)
return response
return middleware
class MyMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call_(self, request):
response = self.get_response(request)
return response
class MyMiddleware(object):
def __init__(self):
pass
def process_request(request):
pass
def process_view(request, view_func, view_args, view_kwargs):
pass
def process_template_response(request, response):
pass
def process_response(request, response):
pass
def process_exception(request, exception):
pass
內(nèi)置中間件
1.CommonMiddleware - 基礎(chǔ)設(shè)置中間件
- DISALLOWED_USER_AGENT-不被允許的用戶代理(瀏覽器)
- APPEND_SLASH-是否追加
/
- USE_ETAG-瀏覽器緩存相關(guān)
2.SecurityMiddleware - 安全相關(guān)中間件
- SECURE_HSTS_SECONDS - 強制使用HTTPS的時間
- SECURE_HSTS_INCLUDE_SUBDOMAINS_HTTPS是否覆蓋子域名
- SECURE_CONTENT_TYPE_NOSNIFF - 是否允許瀏覽器推斷內(nèi)容類型
- SECURE_BROWSER_XSS_FILTER - 是否啟用跨站腳本攻擊過濾器
- SECURE_SSL_REDIRECT - 是否重定向到HTTPS連接
- SECURE_REDIRECT_EXEMPT - 免除重定向到HTTPS
3.SessionMiddleware - 會話中間件
4.CsrfViewMiddleware - 防范跨站身份偽造中間件
F0RIU@M52SIA4_Z}@TV3XIB.png