मुझे थ्रेड-सुरक्षित तरीके से सत्र में डेटा के आधार पर गतिशील रूप से urlpatterns उत्पन्न करने की आवश्यकता है।Django, गतिशील urlconfs, थ्रेड-सुरक्षा
मैंने इसे एक कस्टम यूआरएल रीसोलवर के माध्यम से कार्यान्वित किया जो यूआरएल को बाद में हल करने से रोकता है। मैं requestwurconf को मिडलवेयर से सेट करने के बारे में जानता हूं; लेकिन ऐसे कई कारण हैं जो मैं नहीं कर सकता (Django कैश रिज़ॉल्यूवर, और मेरे मामले में असंबद्ध स्मृति उपयोग के परिणामस्वरूप)।
मुझे किसी को कार्यान्वयन पर नज़र डालने की आवश्यकता है और देखें कि मैंने थ्रेड-सुरक्षा को सही ढंग से संभाला है या नहीं।
धन्यवाद!
कोड:
MyApp/urls.py:
urlpatterns = patterns('',
# other urlconfs
url(r'^/foo', include('foo.urls')),
)
foo/urls.py:
import threading
from django.core.urlresolvers import ResolverMatch
class MyResolver(RegexURLResolver):
def __init__(self):
self.resolver = threading.local()
return super(MyResolver, self).__init__(r'', None)
@property
def urlconf_module(self):
return self.resolver.value
def resolve(self, path):
def view(request):
resolver = request.session.get('myresolver', 'default')
resolver = getattr(import_module('foo.resolvers'), resolver)
self.resolver.value = resolver()
view, args, kwags = super(MyResolver, self).resolve(path)
return view(request, *args, **kwargs)
return ResolverMatch(view,(), {})
urlpatterns = [MyResolver()]
foo/resolvers.py:
class default(object):
@property
def urlpatterns(self):
return patterns('foo.views',
url(r'', 'error'),
)
class test(object):
@property
def urlpatterns(self):
return dynamically_generated_urlpatterns
आपको थ्रेडिंग की आवश्यकता क्यों है? –