2012-05-30 24 views
7

Oturumda yer alan verilere göre iş parçacığı güvenli bir şekilde dinamik olarak urlpatterns oluşturmanız gerekir. Django, dinamik URL'ler, iş parçacığı güvenliği

Ben url sonrasına kadar çözülmesi defers özel URLResolver üzerinden bu uyguladı. Bir middleware gelen request.urlconf ayarlama hakkında bilmiyorum; ama yapamayacağım nedenler var (Django önbellek çözücüleri ve benim durumumda sınırsız bellek kullanımıyla sonuçlanacaktı).

Ben uygulanmasına bakmak ve eğer doğru iş parçacığı güvenliği ele almadığınızı görmek için birine ihtiyacım var.

Teşekkürler!

kodu:

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 
+0

Neden iş parçacığına ihtiyacınız var? –

cevap

0

Aslında uygulamaktan daha iyi olduğunu söyleyebilirim. Bu Middleware gibi daha hızlı olabilir ve size daha fazla kontrol sağlar.

Belki sen fonksiyonu ve olası çıkışlara göndererek planlıyoruz hangi verileri hakkında daha fazla gösterebilir.

Kullanım durumuyla ilgili daha fazla ayrıntı iyi olurdu.

İlgili konular