Tôi cần tạo động các mẫu url dựa trên dữ liệu trong phiên theo cách an toàn.Django, urlconfs động, an toàn chủ đề
Tôi đã triển khai điều này thông qua URL tùy chỉnhResolver giúp giảm độ phân giải url cho đến sau này. Tôi biết về việc thiết lập request.urlconf từ một middleware; nhưng có những lý do tôi không thể làm điều đó (Django cache giải quyết, và trong trường hợp của tôi sẽ dẫn đến việc sử dụng bộ nhớ không bị chặn).
Tôi cần ai đó xem xét triển khai và xem liệu tôi có xử lý chính xác an toàn chỉ hay không.
Cảm ơn!
Mã:
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
Tại sao bạn cần luồng? –