LoginSignup
16
16

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-02-27

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

16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16