1

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.

3
  • 2
    Please show your middleware settings. Also, never ever do this. Commented Jul 20, 2016 at 8:59
  • @DanielRoseman what u mean never ever do this? / I updated questions and add middleware settings Commented Jul 20, 2016 at 9:06
  • what's inside task.curreny_user.py? can I see your project tree structure? Commented Jul 20, 2016 at 9:31

2 Answers 2

6

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.

Sign up to request clarification or add additional context in comments.

Comments

2

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.