python - Django @login_exempt decorator with LoginRequiredMiddleware -
i want loginrequiredmiddleware, need @login_exempt decorator views.
i try write middleware:
exempt_urls = [re.compile(settings.login_url.lstrip('/'))] if hasattr(settings, 'login_exempt_urls'): exempt_urls += [re.compile(expr) expr in settings.login_exempt_urls] class loginrequiredmiddleware(object): """ middleware requires user authenticated view page other login_url. exemptions requirement can optionally specified in settings via list of regular expressions in login_exempt_urls (which can copy urls.py). requires authentication middleware , template context processors loaded. you'll error if aren't. """ def process_request(self, request): assert hasattr(request, 'user'), "the login required middleware\ requires authentication middleware installed. edit your\ middleware_classes setting insert\ 'django.contrib.auth.middlware.authenticationmiddleware'. if doesn't\ work, ensure template_context_processors setting includes\ 'django.core.context_processors.auth'." if not request.user.is_authenticated(): path = request.path_info.lstrip('/') if not any(m.match(path) m in exempt_urls): return httpresponseredirect(settings.login_url) def process_view(self, request, view_func, view_args, view_kwargs): pass # here can check view_kwargs.get('login_exempt')
and write view decorator:
@login_exempt def my_view(request): pass def login_exempt(func): @functools.wraps(func) def wrapper(request, *args, **kwargs): kwargs['login_exempt'] = true return func(request, *args, **kwargs) return wrapper
but in case have:
my_view() got unexpected keyword argument 'login_exempt'
how solve problem correctly @ login_exempt , loginrequiredmiddleware? maybe went wrong way solving problem , there more correct solution?
Comments
Post a Comment