2/28 リポジトリにファイルをあげ忘れていたのを修正。。。
目的
Djangoで独自middlewareを作成、利用する。
環境
- Ubuntu 16.04
- python 3.5.2
- Django 1.10.5
Djangoのmiddlewareとは
リクエストがビューで処理される前処理および、
ビューの後処理としてリクエスト、レスポンスの処理を行う。
実装
middlewares
|_ __init__.py
|_ sample_middleware.py
sample_middleware.py
class SampleMiddleware(object):
"""
サンプルのmiddleware、
リクエストがviewで処理される前と、
レスポンスがクライアントに返される前に画面に文字列表示を行うだけ
"""
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
self.process_request(request) #前処理
response = self.get_response(request) # ビューの処理
self.process_response(request, response) #後処理
return response
def process_request(self, request):
print("リクエストの処理")
def process_response(self, request, response):
print("レスポンスの処理")
ルーティングやビューの準備は適当に。
前処理、後処理のメソッドは任意のものを追加可能
(process_~~である必要はもちろんない)
設定方法
settings.pyの抜粋
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',
'middleware_sample.middlewares.sample_middleware.SampleMiddleware',
]
動作
http://127.0.0.1:8000/test/ にブラウザでアクセスすると、
以下の内容が表示される。
ブラウザアクセス時のサーバ側ターミナルの表示
リクエストの処理
Sample用ビューの処理
レスポンスの処理
[27/Feb/2017 14:11:02] "GET /test/ HTTP/1.1" 200 22
参考
GitHubにサンプルコードを上げておいた
https://github.com/Fufuhu/DjangoMiddlewareSample