fongostev
Июль 24, 2012 23:38:09
Вопрос собственно: можно ли в request.POST передать произвольный объект Python со страницы в views?
fata1ex
Июль 25, 2012 00:42:36
Лучше скажите, чего вы хотите добиться. И почитайте про http-запросы.
Передать приложению произвольный post-запрос, который обработает ваша вьюшка, разумеется, можно. На этом построен весь интернет.
fongostev
Июль 25, 2012 12:42:00
Хотя и эта проблема решилась. Вопрос был в том, что я не могу понять, как можно передать произвольный объект на страницу, а потом из поля hidden получить его обратно в том же виде.
reclosedev
Июль 25, 2012 12:50:33
На крайний случай можно сериализовать объект с помощью
pickle, конвертировать в base64 (или похожее),
подписать его для безопасности, и можно вставлять эту строку куда угодно.
FishHook
Июль 25, 2012 12:59:45
fongostev
Хотя и эта проблема решилась. Вопрос был в том, что я не могу понять, как можно передать произвольный объект на страницу, а потом из поля hidden получить его обратно в том же виде.
А что за объект, можно поинтересоваться и, главное, зачем его вставлять в код таким хитрым образом?
fongostev
Июль 25, 2012 13:34:23
FishHook, грубо говоря, надо вывести список параметров серверов
определенного типа, а потом при нажатии на кнопку передать на соответствующий сервер байтовую строку с параметрами сервера, я сначала строил с объекта типа “сервер” объект формы, и передавал на страницу словарь, где ключи - объекты формы, а значения - объекты серверов, но это не сработало, поэтому я передавал необходимую байтовую строку в Latin-1, потому-что в других кодировках получалась ошибка перевода в юникод.
reclosedev, а Вы правы насчет pickle, про него я забыл
unkier
Июль 25, 2012 13:38:22
мрак
FishHook
Июль 25, 2012 14:19:14
fongostev
FishHook, грубо говоря, надо вывести список параметров серверов
определенного типа, а потом при нажатии на кнопку передать на соответствующий сервер байтовую строку с параметрами сервера, я сначала строил с объекта типа “сервер” объект формы, и передавал на страницу словарь, где ключи - объекты формы, а значения - объекты серверов, но это не сработало, поэтому я передавал необходимую байтовую строку в Latin-1, потому-что в других кодировках получалась ошибка перевода в юникод.
reclosedev, а Вы правы насчет pickle, про него я забыл
Какой HTML-код должен получиться в кнопке и в каком виде у Вас хранятся параметры серверов?
fongostev
Июль 26, 2012 17:48:50
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
Причем, если в скрытое поле поставить одно из полей объекта, то все нормально
unkier
Июль 26, 2012 18:16:14
я сделаю предположение, что вы пытаетесь сделать что то противоестественное.