2015-02-20 2 views
1

У меня возникли проблемы с созданием шаблона URL-адреса.URL-адрес Django для включения #

URL-адрес в формате следующее:

/API#access_token=<string>&expires_in=<timestamp> 

Я не могу изменить # access_token = & expires_in = часть, к сожалению, так как это находится вне моего контроля, и я просто должен просто сделайте мою сторону работы кода.

Я пробовал несколько разных моделей, ряд из которых приведен ниже. Это мой первый проект Django, и любые советы и указатели будут высоко оценены.

url(r'^API#access_token=(?P<token_info>\w+)&expires_in(?P<time>\d+)$' 
url(r'^API#(?P<tokens>\w+)$' 
url(r'^API/#(?P<tokens>\w+)&(?P<expiration>\d+)$' 
+3

Вы уверены, что не смешиваете '#' и '?' Вверх? –

+0

@Andrew_Lvov Определенно не смешивание # –

ответ

5

Вопрос заключается в том, что якорь #, также называемый идентификатор фрагмента, не отправляется на сервер в браузере. Регулярное выражение не может захватить то, чего там нет. Из wikipedia article on the fragment identifier:

функции идентификатора фрагмента иначе, чем остальной части URI, а именно: его обработка является исключительно на стороне клиента, без участия с веб-сервера - конечно сервер обычно помогает определить тип MIME и тип MIME определяют обработку фрагментов . Когда агент (например, веб-браузер) запрашивает веб-ресурс с веб-сервера, агент отправляет URI на сервер, но не отправляет фрагмент. Вместо этого агент ожидает для отправки сервером ресурса, а затем агент обрабатывает ресурс в соответствии с типом документа и его значением.

Единственный способ обойти этот фрагмент в JavaScript на стороне клиента и отправить его как отдельный асинхронный запрос. Для запроса GET вы можете отправить фрагмент в качестве параметра запроса (после удаления хэша) или поместить его в заголовок в качестве пользовательского значения.

+0

Есть ли способ заставить браузер отправить это обратно на сервер после загрузки HTML? Т.е., сначала загружайте страницу, браузер читает URL-адрес, а затем отправляет фрагмент обратно? –

+0

Да, вы можете разобрать клиентскую сторону и отправить отдельный запрос AJAX. – Fiver

Смежные вопросы