Skip to content

Commit 77e4013

Browse files
committed
add cuser middleware
1 parent 01ebaf4 commit 77e4013

File tree

4 files changed

+45
-2
lines changed

4 files changed

+45
-2
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from __future__ import unicode_literals
2+
import threading
3+
from django.contrib.auth import get_user_model
4+
5+
class CuserMiddleware:
6+
_thread_local = threading.local()
7+
8+
def __init__(self, get_response):
9+
self.get_response = get_response
10+
11+
def __call__(self, request):
12+
try:
13+
self.__class__.set_user(request.user)
14+
response = self.get_response(request)
15+
return response
16+
finally:
17+
self.__class__.del_user()
18+
19+
@classmethod
20+
def get_user(cls, default=None):
21+
"""
22+
Retrieve user info
23+
"""
24+
return getattr(cls._thread_local, 'user', default)
25+
26+
@classmethod
27+
def set_user(cls, user):
28+
"""
29+
Store user info
30+
"""
31+
if isinstance(user, str):
32+
user_model = get_user_model()
33+
user = user_model.objects.get(username=user)
34+
cls._thread_local.user = user
35+
36+
@classmethod
37+
def del_user(cls):
38+
"""
39+
Delete user info
40+
"""
41+
if hasattr(cls._thread_local, 'user'):
42+
del cls._thread_local.user

tracking_fields/tests/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"django.middleware.common.CommonMiddleware",
4747
"django.middleware.csrf.CsrfViewMiddleware",
4848
"django.contrib.auth.middleware.AuthenticationMiddleware",
49+
"tracking_fields.middleware.cuser.CuserMiddleware",
4950
"django.contrib.messages.middleware.MessageMiddleware",
5051
"django.middleware.clickjacking.XFrameOptionsMiddleware",
5152
)

tracking_fields/tests/tests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import datetime
55
import json
66

7-
from cuser.middleware import CuserMiddleware
7+
from middleware.cuser import CuserMiddleware
88
from django.contrib.auth.models import User
99
from django.contrib.contenttypes.models import ContentType
1010
from django.core.files import File

tracking_fields/tracking.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
StateWrapper = type("StateWrapper", (object,), dict())
1818

1919
try:
20-
from cuser.middleware import CuserMiddleware
20+
from middleware.cuser import CuserMiddleware
2121

2222
CUSER = True
2323
except ImportError:

0 commit comments

Comments
 (0)