Найти - Пользователи
Полная версия: Символы разделения урла во введенном тексте
Начало » Django » Символы разделения урла во введенном тексте
1
NilovSerge
Всем привет.
Если я в urls.py для вызова вида пишу регэксп
 "FormName/([\w \s\S]*)/([\w \s\S]*)"
и во введенном пользователем тексте есть символ
“/” - то мой вью не вызывается - ошибка. Пробовал заменить “/” на “&” - результат тоже если введен символ “&”…
Можно наверно удалять такие символы и введенного текста или заменять…
encodeURIComponent( на клиенте не помогает в данной ситуации…
Есть ли лучшее решение?

Заранее спасибо
Ferroman
NilovSerge
Есть ли лучшее решение?
Есть.
Написать правильное регулярное выражение.
intuit
“.” Любой символ
“?” Предыдущий фрагмент либо присутствует, либо отсутствует
“\” Обратная косая черта отменяет специальное значение следующего за ней символа
Если бы вы написали строку, которую хотите задать регуляркой (ну, или несколько возможных), можно было бы пример написать.
NilovSerge
На клиенте создается строка по введенным пользователем полям:
/sys/user_task_editor_update/0&1&17.04.2008&H&&Заголовок&Некоторый текст&0
При этом значение “&Заголовок” - это то что пользователь ввел в поле Заголовок
Поэтому разбор в urls.py не находит мою функцию
    (r'^sys/user_task_editor_update/([\w \s\S]*)&([\w \s\S]*)&([\w \s\S]*)&([\w \s\S]*)&([\w \s\S]*)&([\w \s\S]*)&([\w \s\S]*)$', 'image_cards.cards.views.user_task_editor_update'),
Функция user_task_editor_update имеет заголовок:
def user_task_editor_update( request, task_id, user_to, term_date, urgency, title, description, closed ):
То есть получается проблема если в текст пользователь вводит символ разделителя параметров - то ошибка так как получается неправильно число параметров
и функция user_task_editor_update не вызывается

Если на клиенте создавать строку с использованием encodeURIComponent( то получается :
/sys/user_task_editor_update/0&1&17.04.2008&H&%26%D0%97%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D0%BA&%D0%9D%D0%B5%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B9%20%D1%82%D0%B5%D0%BA%D1%81%D1%82&0
но результат тот же

Едмнственно что я смог придумать это во введенном тексте на клиенте менять символ разделителя параметров на что вроде “ParametersSeparator” - и
потом на сервере менять назад - Есть ли лучшее решение?
Ferroman
А зачем было повторять шаблон n-раз?
(r'^sys/user_task_editor_update/([\w \s\S]*)&([\w \s\S]*)&([\w \s\S]*)&([\w \s\S]*)&([\w \s\S]*)&([\w \s\S]*)&([\w \s\S]*)$', 'image_cards.cards.views.user_task_editor_update'),
можно было просто заменить на
(r'^sys/user_task_editor_update/(([\w \s\S]*)&?){1,7}?$', 'image_cards.cards.views.user_task_editor_update'),
А вообще-то лучше наверное вот так:
(разделением не одним & а несколькими, например вот так &&&. Веоятность того что они встретятся в тексте - минимальна.)
(r'^sys/user_task_editor_update/(?P<task_id>\d+)&&&(?P<user_to>\d+)&&&(?P<term_date>[1-9.]+)&&&(?P<urgency>\w+)&&&(?P<title>\w+)&&&(?P<description>\w+)&(?P<closed>[01])$', 'image_cards.cards.views.user_task_editor_update'),
Приведённые я не проверял пока, немного позже проверю.

PS. Используйте бритву Оккама. Я не знаю почему вы решили передавать все параметры через урл, но считаю это - очень плохим решением. Как минимум потому, что строка урла не безразмерна - а текста чловек может залнить много. Кроме того это не сочетается с понятием “человекопонятного” урла.
Может стоит передавать только id записи в базе, что содержит все эти поля, а все остальное доставать оттуда?
NilovSerge
Ferroman
Может стоит передавать только id записи в базе, что содержит все эти поля, а все остальное доставать оттуда?
Это форма для сохранения данных Функция user_task_editor_update - сохраняет данные по введенным данным

С клиента используя jQuery/ajax сохраняются данные Примерно так:
    HRef= "/sys/user_task_editor_update/0&"+task_editor_user_to+"&"+task_editor_term_date+
"&"+task_editor_urgency+"&"+task_editor_title+"&"+task_editor_description+"&"+task_editor_closed
$.getJSON(HRef,
{
},
User_Task_EditorUpdated
);
Хотя знаю что внутри
 $.getJSON(HRef,
{
...
},
можно передавать параметры - но не знаю как тогда обрабатывать параметры в urls.py - надо будет попробовать…
Ferroman
Все равно не понимаю, зачем так сложно? Почему не использовать POST метод для отправки данных….
Как тут например.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB