Как все-таки сбежать? символ в Django url? - PullRequest
1 голос
/ 26 мая 2020

Я знаю это '?' не рекомендуется (разрешен?) в URL django, но одно из моих требований - обрабатывать внешние вызовы, такие как "/ files /? access_token =", и я не могу изменить их синтаксис, поэтому мне нужно его обработать. Я пробовал:

1 re_path(r'(?P<filenamename>[^/]+)(.+)access_token', views.GetFileInfo, name='get_info')

2 re_path(r'(?P<filenamename>[^/]+)(\?)access_token', views.GetFileInfo, name='get_info')

3 re_path(r'(?P<filenamename>[^/]+)(?)access_token', views.GetFileInfo, name='get_info')

4 re_path(r'(?P<filenamename>[^/]+)?access_token', views.GetFileInfo, name='get_info')

5 re_path(r'(?P<filenamename>[^/]+)\?access_token', views.GetFileInfo, name='get_info')

Но ничего из вышеперечисленного не является решением. Верхний URL работает с другими символами, но не с символом вопроса. Я начинаю думать о написании собственного промежуточного программного обеспечения (никогда не делал этого) для изменения свойств запроса или использования чего-то вроде url_rewrite, но все это выглядит как чрезмерная инженерия такой простой задачи, как обработка символа. Я что-то упускаю?

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Вы также можете использовать query_params для получения строки запроса, например:

access_token = request.query_params.get('access_token')

После этого вы можете выполнять операцию получения или фильтрации данных вашей модели в соответствии с вашими требованиями.

0 голосов
/ 26 мая 2020

Это не часть пути, поэтому url / path не знает об этом. Это строка запроса [wiki] . Он хранится в request.GET [Django -doc] как QueryDict объект [Django -doc] , объект, подобный словарю.

Таким образом, вы можете определить путь как:

path('<str:magic_name>', views.GetFileInfo, name='get_info')

и в представлении получить его с помощью:

def GetFileInfo(request, magic_name):
    access_token = request<b>.GET.get('access_token')</b>
    # &hellip;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...