Thaian
Thaian

Reputation: 1245

Django middleware 'module' object is not callable

I have problem with middleware I found a lot of questions about it but nothing help in my case.

I use middleware to get current_user to use in my model to save modified user in save method without write this in view.

Here is original post with this code:

Middleware

from threading import local

_user = local()


class CurrentUserMiddleware(object):
    def process_request(self, request):
        _user.value = request.user


def get_current_user():
    return _user.value

There is something wrong in this code because I'm getting error like:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Python35-32\Lib\wsgiref\handlers.py", line 137, in run
    self.result = application(self.environ, self.start_response)
  File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\contrib\staticfiles\handlers.py", line 63, in __call__
    return self.application(environ, start_response)
  File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\core\handlers\wsgi.py", line 158, in __call__
    self.load_middleware()
  File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\core\handlers\base.py", line 53, in load_middleware
    mw_instance = mw_class()
TypeError: 'module' object is not callable
[20/Jul/2016 10:51:44] "GET /panel/ HTTP/1.1" 500 59
Traceback (most recent call last):
  File "C:\Program Files (x86)\Python35-32\Lib\wsgiref\handlers.py", line 137, in run
    self.result = application(self.environ, self.start_response)
  File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\contrib\staticfiles\handlers.py", line 63, in __call__
    return self.application(environ, start_response)
  File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\core\handlers\wsgi.py", line 158, in __call__
    self.load_middleware()
  File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\core\handlers\base.py", line 53, in load_middleware
    mw_instance = mw_class()
TypeError: 'module' object is not callable
[20/Jul/2016 10:51:44] "GET /favicon.ico HTTP/1.1" 500 59

My middleware settings:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.gzip.GZipMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'reversion.middleware.RevisionMiddleware',
    'task.current_user',
)

Can you give me some advice where is error or something? I don't have any other idea to try so I hope that you have some.

Upvotes: 1

Views: 6082

Answers (2)

oleckkxs
oleckkxs

Reputation: 1310

In my case, my custom middleware missed the call method. So you can try to check your custom migrations and add call method if it's missed. Django recommends this code as default one:

    def __call__(self, request):
        response = self.get_response(request)
        return response

https://docs.djangoproject.com/en/3.2/topics/http/middleware/#writing-your-own-middleware

Upvotes: 2

Antoine Pinsard
Antoine Pinsard

Reputation: 34922

You must give the full path of your middleware class. Not the module containing the middleware.

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.gzip.GZipMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'reversion.middleware.RevisionMiddleware',
    'task.current_user.CurrentUserMiddleware',
)

Note that you had plenty of examples right above.

Upvotes: 6

Related Questions