Как получить строку url из url с помощью resolve django для RBAC
Я использовал extract_views_from_urlpatterns
метод команды управления show_urls
в пакете django-extenstion
для заполнения системных урлов в БД. Теперь при каждом запросе пользователя к серверу он будет перехватываться в промежуточном ПО, где я хочу проверить, найден ли запрашиваемый URL в модели URLMaster
(хранилище всех системных URL), но он не совпал из-за того, что запрашиваемый url не найден здесь Я прилагаю код.
Заполнение URL-адресов
urlconf = __import__(settings.ROOT_URLCONF)
urls = Command().extract_views_from_urlpatterns(urlconf.urls.urlpatterns)
for view, url, url_name in urls:
if url_name is None:
URLMaster.objects.get_or_create(url=url, defaults=dict(view_name=view.__qualname__, url_name=url_name))
В настоящее время я проверяю этот URL в режиме просмотра, далее буду проверять в промежуточном ПО.
from django.contrib.admindocs.views import simplify_regex # for simplifying regex
from src.core.models import URLMaster # model has all the url's
request_url = request._request.resolver_match.route
print(request_url) # will print 'rough/packet-split/(?P<pk>[^/.]+)/packet-list/$'
# simplifying the URL
print(simplify_regex(request_url)) # will print '/rough/packet-split/<pk>/packet-list/'
# The same url I have saved in DB
url_master_url = URLMaster.objects.get(id=1216).url
print(url_master_url) # will print 'rough/^packet-split/(?P<pk>[^/.]+)/packet-list\\.(?P<format>[a-z0-9]+)/?$'
# now simplifying the URL
print(simplify_regex(url_master_url)) # will print '/rough/packet-split/<pk>/packet-list\\.<format>/'
# now i am comparing is it the same like
simplify_regex(url_master_url) == simplify_regex(request_url) # returning false due to the url mismatched
Я привязываю разрешение к определенному URL. Но оно не совпало, поэтому есть ли какой-нибудь подход к сравнению или сохранению URL в DB