Hello!
Thanks in advance for any help on this issue! I'm attempting to build a Mezzanine/Cartridge site for a distillery that needs to verify their users age, and I believe middleware is the place to do it. I'm trying to write my own middleware and am running into several issues with the "old style" vs "new style" middleware, I believe the new middleware was introduced in django 1.10, which is what Mezzanine is currently using.
Note* I had this working on a Mezzanine project just fine, but it seems to be having issues now that Cartridge is also installed.
My middleware code:
class VerifyAgeMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
cookie = request.COOKIES.get('age', None)
if (request.path == '/verify-age/') or (request.path == '/admin/') or (request.path =='/admin/login/'):
pass
else:
if (cookie):
response = self.get_response(request)
return response
else:
return redirect('/verify-age')
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
With this code, I'm getting the error: "TypeError: __init__() missing 1 required positional argument: 'get_response'", but obviously get_response is in my init function above.
I read elsewhere online, people suggested this is because of the switch to the "new style" of middleware, and in my settings.py file, I should change "MIDDLEWARE_CLASSES" to just "MIDDLEWARE".
So, when I do that, I get this error: TypeError: __init__() takes 1 positional argument but 2 were given
After some messing around, I removed my custom middleware and was still getting the error, and found out that this error wasn't referring to my own middleware, but it looks like it's having an issue with the "cartridge.shop.middleware.ShopMiddleware" middleware.
When I do that, I get this weird error that I can't find much about online: AttributeError: 'function' object has no attribute '__mro__'
but seems like it's expecting a class-based middleware instead of a function.
So what are my current options for writing a custom middleware within a Mezzanine/Cartridge site?
Thanks again for any help!