У меня есть веб-приложение, которое будет возвращать идентификатор пользователя на основе первого сегмента URL, очень похоже на Twitter:
http://www.myapplication.com/user-name-goes-here/
Это тоже может пойти глубже, вот так:
http://www.myapplication.com/user-name-goes-here/news/article_1/
Чтобы сломать сайт, я использую следующую технику маршрутизации URL:
(r'^(?P<slug>\w+)/', include('myapp.sites.urls')),
Это затем направит пользователя на правильную страницу, но в существующем состоянии мне приходится запрашивать базу данных в каждом представлении, чтобы получить идентификатор_пользователя на основе первого сегмента URL. Я надеялся как-то автоматизировать это, чтобы мне не приходилось каждый раз разбрасывать свои представления одним и тем же кодом ... Мое решение заключалось в создании некоторого промежуточного программного обеспечения, которое проверяет сегмент URL и возвращает 404, если его не найдено:
from django.http import Http404
class DomainMiddleware(object):
def process_request(self, request):
from myapp.sites.models import Sites
dname = request.path.split('/')[1]
if not dname:
return
try:
d = Sites.objects.get(domain__exact=dname)
except Sites.DoesNotExist:
raise Http404
return
Это работает, но пытается проанализировать КАЖДЫЙ запрос, даже те, которые относятся к изображениям, значкам и т. Д.
Мой вопрос таков; Есть ли способ выполнить этот запрос при каждой загрузке страницы, не забивая мои просмотры дополнительным кодом? Если промежуточное программное обеспечение является решением, как я могу изменить свой код, чтобы он не включал КАЖДЫЙ запрос, а только те, которые были успешно перенаправлены по URL?
Надеюсь, кто-то может помочь!