mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-01-15 21:53:28 +01:00
84 lines
2.3 KiB
Python
84 lines
2.3 KiB
Python
"""
|
|
threadlocals middleware
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
make the request object everywhere available (e.g. in model instance).
|
|
|
|
based on: http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser
|
|
|
|
Put this into your settings:
|
|
--------------------------------------------------------------------------
|
|
MIDDLEWARE_CLASSES = (
|
|
...
|
|
'django_tools.middlewares.ThreadLocal.ThreadLocalMiddleware',
|
|
...
|
|
)
|
|
--------------------------------------------------------------------------
|
|
|
|
|
|
Usage:
|
|
--------------------------------------------------------------------------
|
|
from django_tools.middlewares import ThreadLocal
|
|
|
|
# Get the current request object:
|
|
request = ThreadLocal.get_current_request()
|
|
|
|
# You can get the current user directly with:
|
|
user = ThreadLocal.get_current_user()
|
|
--------------------------------------------------------------------------
|
|
|
|
:copyleft: 2009-2017 by the django-tools team, see AUTHORS for more details.
|
|
:license: GNU GPL v3 or above, see LICENSE for more details.
|
|
"""
|
|
|
|
try:
|
|
from threading import local
|
|
except ImportError:
|
|
from django.utils._threading_local import local
|
|
|
|
try:
|
|
from django.utils.deprecation import MiddlewareMixin
|
|
except ImportError:
|
|
MiddlewareMixin = object # fallback for Django < 1.10
|
|
|
|
|
|
_thread_locals = local()
|
|
|
|
|
|
def get_current_request():
|
|
"""returns the request object for this thread"""
|
|
return getattr(_thread_locals, "request", None)
|
|
|
|
|
|
def get_current_user():
|
|
"""returns the current user, if exist, otherwise returns None"""
|
|
request = get_current_request()
|
|
if request:
|
|
return getattr(request, "user", None)
|
|
|
|
return getattr(_thread_locals, "user", None)
|
|
|
|
|
|
def write_current_user(user):
|
|
_thread_locals.user = user
|
|
|
|
|
|
def delete_current_user():
|
|
del _thread_locals.user
|
|
|
|
|
|
class ThreadLocalMiddleware(MiddlewareMixin):
|
|
"""Simple middleware that adds the request object in thread local storage."""
|
|
|
|
def process_request(self, request):
|
|
_thread_locals.request = request
|
|
|
|
def process_response(self, request, response):
|
|
if hasattr(_thread_locals, "request"):
|
|
del _thread_locals.request
|
|
return response
|
|
|
|
def process_exception(self, request, exception):
|
|
if hasattr(_thread_locals, "request"):
|
|
del _thread_locals.request
|