dangerChihuahua007
dangerChihuahua007

Reputation: 20915

Why is writing my own MiddleWare crashing my Django application?

I want to run a function before any view in my app is loaded, so I wrote my own middleware. It is in a file called "DoBeforeMiddleWare.py" located in the folder "my_app_name" and, for now, looks like

class DoBeforeMiddleWare:
    def process_request(self, request):
        return None
    def process_view(self, request, view_func, view_args, view_kwargs):
        return None

I try to place this function in my list of middleware in settings.py:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'my_project_name.my_app_name.DoBeforeMiddleWare',
)

However, my app never loads after I restart passenger. Why? My app loads if I comment out the last line of |MIDDLEWARE_CLASSES|.

Upvotes: 0

Views: 796

Answers (1)

cberner
cberner

Reputation: 3040

process_request and process_view must return None or an HttpResponse object (reference). If you want a no-op middleware, you should change them to return None, as follows:

class DoBeforeMiddleWare:
    def process_request(self, request):
        return None
    def process_view(self, request, view_func, view_args, view_kwargs)
        return None

Upvotes: 1

Related Questions