Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Символы разделения урла во введенном тексте [RSS Feed]

#1 Апрель 16, 2008 12:41:27

NilovSerge
От:
Зарегистрирован: 2007-02-15
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

Символы разделения урла во введенном тексте

Всем привет.
Если я в urls.py для вызова вида пишу регэксп

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

Заранее спасибо



Офлайн

#2 Апрель 16, 2008 14:54:43

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Символы разделения урла во введенном тексте

NilovSerge
Есть ли лучшее решение?
Есть.
Написать правильное регулярное выражение.
intuit
“.” Любой символ
“?” Предыдущий фрагмент либо присутствует, либо отсутствует
“\” Обратная косая черта отменяет специальное значение следующего за ней символа
Если бы вы написали строку, которую хотите задать регуляркой (ну, или несколько возможных), можно было бы пример написать.

Офлайн

#3 Апрель 17, 2008 09:40:37

NilovSerge
От:
Зарегистрирован: 2007-02-15
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

Символы разделения урла во введенном тексте

На клиенте создается строка по введенным пользователем полям:

/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” - и
потом на сервере менять назад - Есть ли лучшее решение?



Офлайн

#4 Апрель 17, 2008 11:05:18

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Символы разделения урла во введенном тексте

А зачем было повторять шаблон 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 записи в базе, что содержит все эти поля, а все остальное доставать оттуда?

Отредактировано (Апрель 17, 2008 11:07:18)

Офлайн

#5 Апрель 17, 2008 12:25:38

NilovSerge
От:
Зарегистрирован: 2007-02-15
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

Символы разделения урла во введенном тексте

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 - надо будет попробовать…



Офлайн

#6 Апрель 17, 2008 13:43:26

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Символы разделения урла во введенном тексте

Все равно не понимаю, зачем так сложно? Почему не использовать POST метод для отправки данных….
Как тут например.

Офлайн

  • Начало
  • » Django
  • » Символы разделения урла во введенном тексте[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version