Уведомления

Группа в Telegram: @pythonsu

#1 Июль 24, 2012 23:38:09

fongostev
От: Moskau
Зарегистрирован: 2012-04-03
Сообщения: 62
Репутация: +  4  -
Профиль   Отправить e-mail  

Обработка объектов Python в request.POST

Вопрос собственно: можно ли в request.POST передать произвольный объект Python со страницы в views?

Офлайн

#2 Июль 25, 2012 00:42:36

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Обработка объектов Python в request.POST

Лучше скажите, чего вы хотите добиться. И почитайте про http-запросы.

Передать приложению произвольный post-запрос, который обработает ваша вьюшка, разумеется, можно. На этом построен весь интернет.



Офлайн

#3 Июль 25, 2012 12:42:00

fongostev
От: Moskau
Зарегистрирован: 2012-04-03
Сообщения: 62
Репутация: +  4  -
Профиль   Отправить e-mail  

Обработка объектов Python в request.POST

Хотя и эта проблема решилась. Вопрос был в том, что я не могу понять, как можно передать произвольный объект на страницу, а потом из поля hidden получить его обратно в том же виде.

Офлайн

#4 Июль 25, 2012 12:50:33

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Обработка объектов Python в request.POST

На крайний случай можно сериализовать объект с помощью pickle, конвертировать в base64 (или похожее), подписать его для безопасности, и можно вставлять эту строку куда угодно.

Офлайн

#5 Июль 25, 2012 12:59:45

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

Обработка объектов Python в request.POST

fongostev
Хотя и эта проблема решилась. Вопрос был в том, что я не могу понять, как можно передать произвольный объект на страницу, а потом из поля hidden получить его обратно в том же виде.
А что за объект, можно поинтересоваться и, главное, зачем его вставлять в код таким хитрым образом?



Офлайн

#6 Июль 25, 2012 13:34:23

fongostev
От: Moskau
Зарегистрирован: 2012-04-03
Сообщения: 62
Репутация: +  4  -
Профиль   Отправить e-mail  

Обработка объектов Python в request.POST

FishHook, грубо говоря, надо вывести список параметров серверов
определенного типа, а потом при нажатии на кнопку передать на соответствующий сервер байтовую строку с параметрами сервера, я сначала строил с объекта типа “сервер” объект формы, и передавал на страницу словарь, где ключи - объекты формы, а значения - объекты серверов, но это не сработало, поэтому я передавал необходимую байтовую строку в Latin-1, потому-что в других кодировках получалась ошибка перевода в юникод.
reclosedev, а Вы правы насчет pickle, про него я забыл

Офлайн

#7 Июль 25, 2012 13:38:22

unkier
От:
Зарегистрирован: 2009-11-05
Сообщения: 92
Репутация: +  2  -
Профиль  

Обработка объектов Python в request.POST

мрак



Офлайн

#8 Июль 25, 2012 14:19:14

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

Обработка объектов Python в request.POST

fongostev
FishHook, грубо говоря, надо вывести список параметров серверов
определенного типа, а потом при нажатии на кнопку передать на соответствующий сервер байтовую строку с параметрами сервера, я сначала строил с объекта типа “сервер” объект формы, и передавал на страницу словарь, где ключи - объекты формы, а значения - объекты серверов, но это не сработало, поэтому я передавал необходимую байтовую строку в Latin-1, потому-что в других кодировках получалась ошибка перевода в юникод.
reclosedev, а Вы правы насчет pickle, про него я забыл

Какой HTML-код должен получиться в кнопке и в каком виде у Вас хранятся параметры серверов?



Офлайн

#9 Июль 26, 2012 17:48:50

fongostev
От: Moskau
Зарегистрирован: 2012-04-03
Сообщения: 62
Репутация: +  4  -
Профиль   Отправить e-mail  

Обработка объектов Python в request.POST

FishHook
Например, есть часть шаблона:

      <table border="0" cellpadding="7" cellspacing="0">
      {% for webslot in slotlist %}
	  {% if webslot.run %}
	    <tr bgcolor="green">
	  {% endif %}
	  {% if webslot.stop %}
	    <tr bgcolor="yellow">
	  {% endif %}
	  {% if webslot.err %}
	    <tr bgcolor="red">
	  {% endif %}
	  <td>{{ webslot.Name }}</td>
	  <td>{{ webslot.Type }}</td>
	  <td>{{ webslot.pop_ip_port }}</td>
	  <td>{{ webslot.Status }}</td>
<td>
<form method="post">
<input type="submit" value="Restart" name="restart" onclick="location.href='/restart/?{{ webslot.pop_ip_port }}'" />
<input type="hidden" name="need" value="{{ webslot.SlotState }}" />
</form>
</td>
<td>
<form method="post">
<input type="submit" value="Params" name="slot_params" onclick="location.href='/change/slot/?{{ webslot.pop_ip_port }}'" />
<input type="hidden" name="change_slot" value="{{ webslot }}" />
</form>
</td>
</tr>
      {% endfor %}
      </table>
И при нажатии кнопки через скрытое поле ‘change_slot’ идет передача объекта во views.
При рендеринге этой страницы возникает исключение:
Exception Type:	TemplateSyntaxError
Exception Value:	
Caught AttributeError while rendering: 'function' object has no attribute 'get'
Exception Location:	/usr/lib/python2.7/dist-packages/django/forms/forms.py in non_field_errors, line 243
Причем, если в скрытое поле поставить одно из полей объекта, то все нормально

Офлайн

#10 Июль 26, 2012 18:16:14

unkier
От:
Зарегистрирован: 2009-11-05
Сообщения: 92
Репутация: +  2  -
Профиль  

Обработка объектов Python в request.POST

я сделаю предположение, что вы пытаетесь сделать что то противоестественное.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version