Potrzebuję dynamicznie generować urlwzory na podstawie danych w sesji w sposób bezpieczny dla wątków.Django, dynamiczne adresy URL, bezpieczeństwo wątków
Zaimplementowałem to za pomocą niestandardowego URLResolver, który rozróżnia rozwiązywanie adresów URL na później. Wiem o ustawieniu request.urlconf z middleware; ale są powody, dla których nie mogę tego zrobić (Django buforuje przeliczniki, aw moim przypadku spowodowałoby użycie nieograniczonej pamięci).
Potrzebuję kogoś, kto przyjrzy się implementacji i zobaczę, czy poprawnie obchodziłem się z bezpieczeństwem wątków.
Dzięki!
Kod:
MojaApl/urls.py:
urlpatterns = patterns('',
# other urlconfs
url(r'^/foo', include('foo.urls')),
)
bla/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()]
bla/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
Dlaczego potrzebujesz gwintowania? –