Параметр запроса Django удаляется, если в нем есть знак (+)

Когда я пытаюсь получить параметр строки запроса, все работает, но только знак + удаляется.

Вот url файла:

urlpatterns = [
re_path(r'^forecast/(?P<city>[\w|\W]+)/$', weather_service_api_views.getCurrentWeather)]

Здесь просмотр Файл:

@api_view(['GET'])
def getCurrentWeather(request, city):
   at = request.GET["at"]
   print(at)

   return JsonResponse({"status": "ok"}, status=200)

Итак, если я обращусь к серверу с таким URL:

http://192.168.0.5:8282/forecast/Bangladesh/?at=2018-10-14T14:34:40+0100

вывод at выглядит следующим образом:

2018-10-14T14:34:40 0100

Всегда зачеркивается знак +. Никакие другие символы не удаляются. Я использовал такие символы, как !, = , - и т.д.

Поскольку + является специальным символом, вам придется закодировать ваше значение. Где кодировать? Это зависит от того, как вы генерируете значения для at. Исходя из ваших URL и конечных точек, похоже, что вы работаете над погодным приложением, и значение at генерируется Javascript. Вы можете закодировать ваши значения с помощью encodeURIComponent

let at = encodeURIComponent(<your_existing_logic>)

eg:

let at = encodeURIComponent('2018-10-14T14:34:40+0100')

вернет результат

'2018-10-14T14%3A34%3A40%2B0100'

затем в бэкенде вы можете получить это значение с помощью: at = request.GET.get('at') это даст вам желаемое значение, 2018-10-14T14:34:40+0100 в данном случае.

Если вы создаете параметр at в бэкенде, то есть несколько способов добиться этого. Вы можете рассмотреть это решение: Как кодировать параметры URL в Python?

Вернуться на верх