У меня есть простое приложение Django, в котором я хочу перехватить полный URL-адрес и получить от него некоторую информацию. URL будет иметь следующую форму:
ourdomain.com/2/abc:AB$12345$AB12345678_01.xyz/abc/1000,1000/1/a.xyz
Так что в моем urls.py я ловлю URL-адрес так:
path("<path:the_url>", views.index, name='the_endpoint'),
В моих модульных тестах все работает без нареканий. Затем я проверил его вручную, выполнив вызов и распечатав URL-адрес, который у меня появляется в виде:
def index(request, the_url):
print(the_url)
return HttpResponse("Some response", status=200)
Но затем я получаю это в терминале:
2/abc:AB2345.xyz/abc/1000,1000/1/a.xyz
вместо ожидаемое:
2/abc:AB$12345$AB12345678_01.xyz/abc/1000,1000/1/a.xyz
Я удалил знаки доллара из URL запроса, а затем получил URL, который ожидал. Так что знаки доллара являются источником неприятностей. Я не уверен, как я могу это исправить, хотя.
Кто-нибудь знает, как я могу получить полный URL-адрес, когда он включает в себя знаки доллара?
[РЕДАКТИРОВАТЬ]
Я написал простое промежуточное ПО, которое я положил вверху из списка промежуточных программ:
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
print(request.get_full_path())
print(request.get_full_path_info())
print(request.get_raw_uri())
print(request.build_absolute_uri())
response = self.get_response(request)
return response
В нем я проверяю, могу ли я получить необработанный URL-адрес до того, как он попадет в другие промежуточные программы самого представления. К сожалению, он также распечатывает измененные файлы:
/2/abc:edepot:AB2345.xyz/abc/1000,1000/1/a.xyz
/2/abc:AB2345.xyz/abc/1000,1000/1/a.xyz
http://localhost:8000/2/abc:AB2345.xyz/abc/1000,1000/1/a.xyz
http://localhost:8000/2/abc:AB2345.xyz/abc/1000,1000/1/a.xyz
Так что я думаю, что URL-адрес был изменен ранее где-то в пределах Django. Кто-нибудь знает где?