Форум сайта python.su
В PHP есть чудесная фишечка для ленивых - возможность передать в параметрах запроса массив с указанными элеменами и получить их в виде массива. Без дополнительного кодирования. Есть ли такое в пирамиде?
Другими словами - вот я даю такой запрос пирамиде:
http://.../test?var[1]=10&var[3]=40&var[14]=100500
Отредактировано sank (Ноя. 8, 2012 10:25:45)
Офлайн
Это называется GET и он является стандартным методом передачи данных в протоколе http и собственно язык программирования или фреймворк тут совершенно не при чем.
ЕМНИП в пирамиде
def __init__(self,request): request.GET
Офлайн
фиш, он другое имел ввиду
если:
http://.../test?var=10&var=40&var=100500
... request.GET.getall('var') >>> [u'10', u'40', u'100500']
Отредактировано appetito (Ноя. 8, 2012 13:30:03)
Офлайн
Да, appetito, вы совершенно правы, я это имел в виду, но хотелось бы чуть функциональней.
С getall() всё понятно. Просто для способа с getall, если на серваке не парсить отдельно переменные, то нужно отдельно передавать массив переменных, которые за индексацию отвечают. Т.е. нужно передать в адресе так:
http://.../test?var=10&var=40&var=100500&vid=1&vid=3&vid=14
Офлайн
sank
Есть ли такое в пирамиде?
Отредактировано bismigalis (Ноя. 8, 2012 17:33:46)
Офлайн
Многие для сериализации/десериализации/валидации в pyramid используют Colander он умеет и это и гораздо большее.
Офлайн
В общем проблема лени свелась к такому решению:
Переменные передаю так:
http://.../test?var=10&var=40&var=100500&vid=1&vid=3&vid=14
d = dict(zip(request.params.getall("vid"), request.params.getall("var")))
Офлайн
Не красивое решение. Лучше бы передал var_1=10&var_3=40&var_14=100500, перебрал бы весь GET и и по startswith('var_) вытащил нужные ключики. А то получился какой-то однострочный костыль...
Офлайн
Ну тут на любителя …
В вашем варианте больше кода, больше процессору работать, код менее читабельный. Зато меньше битиков по сети гонится.
Мне вот мой как-то красивей кажется
Офлайн
Процессорное время сегодня стоит гораздо меньше времени программиста, который будет это поддерживать.
Офлайн