Как поймать полный URL в представлении Django, которое включает в себя знаки доллара? - PullRequest
1 голос
/ 04 февраля 2020

У меня есть простое приложение 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. Кто-нибудь знает где?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...