Djangoの独自ミドルウェアを作成する

More than 1 year has passed since last update.

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