Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 8, 2012 10:20:59

sank
Зарегистрирован: 2012-10-05
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyramid: Парметры запроса в виде массива

В PHP есть чудесная фишечка для ленивых - возможность передать в параметрах запроса массив с указанными элеменами и получить их в виде массива. Без дополнительного кодирования. Есть ли такое в пирамиде?

Другими словами - вот я даю такой запрос пирамиде:

http://.../test?var[1]=10&var[3]=40&var[14]=100500
Можно ли штатными средствами пирамиды получить из этого такой словарик (или любой объект, массив там …):
{1: 10, 3: 40, 14: 100500}

Отредактировано sank (Ноя. 8, 2012 10:25:45)

Офлайн

#2 Ноя. 8, 2012 10:29:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Pyramid: Парметры запроса в виде массива

Это называется GET и он является стандартным методом передачи данных в протоколе http и собственно язык программирования или фреймворк тут совершенно не при чем.
ЕМНИП в пирамиде

 def __init__(self,request):
   request.GET
даст словарь GET-запроса



Офлайн

#3 Ноя. 8, 2012 13:27:57

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Pyramid: Парметры запроса в виде массива

фиш, он другое имел ввиду

если:

http://.../test?var=10&var=40&var=100500
тогда:
...
request.GET.getall('var')
>>> [u'10', u'40', u'100500']



Отредактировано appetito (Ноя. 8, 2012 13:30:03)

Офлайн

#4 Ноя. 8, 2012 15:22:34

sank
Зарегистрирован: 2012-10-05
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyramid: Парметры запроса в виде массива

Да, appetito, вы совершенно правы, я это имел в виду, но хотелось бы чуть функциональней.
С getall() всё понятно. Просто для способа с getall, если на серваке не парсить отдельно переменные, то нужно отдельно передавать массив переменных, которые за индексацию отвечают. Т.е. нужно передать в адресе так:

http://.../test?var=10&var=40&var=100500&vid=1&vid=3&vid=14
Потом отдельно обработать массив vid и потом уже сопоставить индексы для var.

Ещё вариант - передать описанную в начальном посте строку, отдельно пробежаться по параметрам, сформировать массив в виде {1: 10, 3: 40, 14: 100500} и потом его юзать.

Вот если бы была возможность вообще этот момент не кодить, код получился бы красивей

Офлайн

#5 Ноя. 8, 2012 17:33:10

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Pyramid: Парметры запроса в виде массива

sank
Есть ли такое в пирамиде?

нет.

https://groups.google.com/d/topic/pylons-discuss/gEgPkX-6bbo/discussion

Отредактировано bismigalis (Ноя. 8, 2012 17:33:46)

Офлайн

#6 Ноя. 9, 2012 04:33:34

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Pyramid: Парметры запроса в виде массива

Многие для сериализации/десериализации/валидации в pyramid используют Colander он умеет и это и гораздо большее.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Ноя. 9, 2012 21:42:11

sank
Зарегистрирован: 2012-10-05
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyramid: Парметры запроса в виде массива

В общем проблема лени свелась к такому решению:
Переменные передаю так:

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")))
Вуаля, одна строчка

Офлайн

#8 Ноя. 10, 2012 10:41:41

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Pyramid: Парметры запроса в виде массива

Не красивое решение. Лучше бы передал var_1=10&var_3=40&var_14=100500, перебрал бы весь GET и и по startswith('var_) вытащил нужные ключики. А то получился какой-то однострочный костыль...



Офлайн

#9 Ноя. 13, 2012 09:51:44

sank
Зарегистрирован: 2012-10-05
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyramid: Парметры запроса в виде массива

Ну тут на любителя …
В вашем варианте больше кода, больше процессору работать, код менее читабельный. Зато меньше битиков по сети гонится.
Мне вот мой как-то красивей кажется

Офлайн

#10 Ноя. 13, 2012 10:53:41

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Pyramid: Парметры запроса в виде массива

Процессорное время сегодня стоит гораздо меньше времени программиста, который будет это поддерживать.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version