【Django】Django 中介軟體(middleware)
什麼是中介軟體(middleware)
django 中的中介軟體(middleware),在django中,中介軟體其實就是一個類,在請求到來和結束後,django會根據自己的規則在合適的時機執行中介軟體中相應的方法。
在django專案的settings模組中,有一個 MIDDLEWARE_CLASSES 變數,其中每一個元素就是一箇中介軟體
-
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.middleware.auth.AuthMiddleware', ----自定義的
-
'common.middleware.oplog.OperationLogMiddleware',
- ]
自定義中介軟體:
1、中介軟體中可定義的1個或多個方法:
- process_request(self,request) 傳送請求
- process_view(self,request, view_func, view_args, view_kwargs) views 函式處理
- process_template_response(self,request, response)
- process_exception(self,request, exception) 異常處理,views報錯才執行
- process_response(self,request, response) 返回結果
2、建立中介軟體類
a、新建1個 XXX 包 或資料夾
b、新1個 AAA.py 模組
c、在 AAA.py 中 寫如下面 一個類,類包含 如下一個或多個函式,函式名稱和引數不能改變
d、匯入中介軟體模組,from django.utils.deprecation import MiddlewareMixin
-
# -*- coding: utf-8 -*-
-
-
from django.utils.deprecation import MiddlewareMixin
-
from django.shortcuts import redirect, render_to_response
-
from apps.models import *
-
from common.utils.account import is_authenticated, get_admin_privileges
-
-
-
class AuthMiddleware(MiddlewareMixin):
-
def process_view(self, request, view_func, view_args, view_kwargs):
-
view_name = view_func.__name__
-
-
if view_name in ['login','web_hooks']:
-
return None
-
-
if not is_authenticated(request):
-
return redirect('login')
-
-
request.session['current_view_name'] = view_name
-
-
if view_name in ['index', 'profile', 'logout','test']:
-
return None
-
-
self.add_operation_log(request, view_name)
-
-
admin_id = request.session['current_admin_id']
-
admin = Admin.objects.get(id=admin_id)
-
if admin.role_id == Role.ROLE_SUPPER:
-
return None
- ....
3、註冊這個中介軟體
在settings.py 中 MIDDLEWARE ,註冊這個中介軟體
-
MIDDLEWARE = [
-
'common.middleware.auth.AuthMiddleware',
- ]
利用中間鍵來做IP過濾
-
from django.utils.deprecation import MiddlewareMixin
-
from django.shortcuts import HttpResponse,render
-
blacklist = [
-
'127.0.0.1',
-
'192.168.0.102',
-
]
-
-
class IpInterceptor(MiddlewareMixin):
-
def process_request(self,request):
-
if request.META.get('REMOTE_ADDR',None) in blacklist:
-
return HttpResponse("非法使用者")
-
# return render(request,'index.html')
-
else:
-
return None
-
from django.utils.deprecation import MiddlewareMixin
-
from django.shortcuts import HttpResponse,render
-
blacklist = [
-
'127.0.0.1',
-
'192.168.0.102',
-
]
-
-
class IpInterceptor(MiddlewareMixin):
-
def process_request(self,request):
-
if request.META.get('REMOTE_ADDR',None) in blacklist:
-
return HttpResponse("非法使用者")
-
# return render(request,'index.html')
-
else:
- return None
c
參考:
https://my.oschina.net/esdn/blog/825194
http://www.cnblogs.com/zhaof/p/6281541.html
https://my.oschina.net/esdn/blog/825194
http://www.cnblogs.com/zhaof/p/6281541.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2146162/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- django中介軟體Django
- Django——中介軟體Django
- Django-中介軟體Django
- django--中介軟體Django
- django中介軟體介紹Django
- Django 2.1.3 中介軟體使用Django
- django 分頁器 中介軟體Django
- Django框架之中介軟體引入Django框架
- Django框架之中介軟體思想Django框架
- Django元件---Django請求生命週期和中介軟體Django元件
- 中介軟體(middleware)
- Django學習筆記(15)——中介軟體Django筆記
- Sanic middleware – 中介軟體
- Django-中介軟體的介紹及使用Django
- 筆記:中介軟體 middleware筆記
- middleware 中介軟體詳解
- Django檢視之檢視類和中介軟體Django
- Django筆記二十九之中介軟體介紹Django筆記
- .NET Core 自定義中介軟體 Middleware
- Redux Middleware中介軟體原始碼 分析Redux原始碼
- 使用django 中介軟體在所有請求前執行功能Django
- Django基礎七之CBV裝飾器和中介軟體Django
- redux深入理解之中介軟體(middleware)Redux
- ASP.NET Core 中介軟體(Middleware)(一)ASP.NET
- 定製.NET 6.0的Middleware中介軟體
- Jerry的CRM Middleware(中介軟體)文章合集
- Django CBV裝飾器 中介軟體 auth模組 CSRF跨站請求Django
- 深入理解Django:中介軟體與訊號處理的藝術Django
- Django 中介軟體實現使用者認證與IP頻率限制Django
- Redux的中介軟體Middleware不難,我信了^_^Redux
- Go Web學習(2)——實現中介軟體(middleware)GoWeb
- django1.8官方文件翻譯:3-6-2內建的中介軟體Django
- 好程式設計師Python培訓分享Django中介軟體基礎用法詳解程式設計師PythonDjango
- 好程式設計師Python培訓之Django中介軟體基礎用法詳解程式設計師PythonDjango
- Laravel學習筆記六-許可權管理與中介軟體MiddlewareLaravel筆記
- Django(2) - Django模板Django
- Redis中介軟體與Web中介軟體RedisWeb
- Django(33)Django操作cookieDjangoCookie