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.
So I tried switching to the function-based middleware from the django
docs: https://docs.djangoproject.com/en/1.10/topics/http/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!
--
You received this message because you are subscribed to the Google Groups
"Mezzanine Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.