"Олег Бройтман. Zope - The Object Publishing Environment" - читать интересную книгу автора ответ
Без помощи со стороны программы ZPublisher, конечно, не может осуществить подходящие преобразования типов, поэтому автор может указать, в каком виде он хочет получить данные. Вот пример формы для заполнения, с указаниями, зашитыми в имена полей: FORM name="formA" action="myObject" method="POST"> input type="text" name="age:int" size="2"> input type="checkbox" name="category:int:list">K1 input type="checkbox" name="category:int:list">K2 input type="submit" name="manage_setAge:method" value="Установить"> input type="submit" name="manage_delete:method" value="Удалить"> /FORM> После заполнения формы в браузере и нажатия одной из кнопок ZPublisher преобразует введенные данные. Переменная age преобразуется в целое, checkbox'ы - в список целых, и вызовется один из методов объекта myObject в зависимости от нажатой кнопки. Проверка, естественно, осуществляется на стороне сервера, в Zope. Если переменная age не преобразовывается в целое, возникнет ошибка. Ее может обработать публикуемый объект, а нет - Zope выдаст пользователю HTML с текстом об ошибке. Для проверки на стороне клиента можно использовать JavaScript. Искривленные имена слегка мешают доступу из JS, но это не смертельно: element = document.forms["formA"].elements["age:int"] Как именно вызовется метод, зависит от его (метода) сигнатуры (в Питоне вся информация о коде доступна во время выполнения). Например, если myObject - экземпляр вот такого класса: def view(self, age=None): if age is None: age = self.age return "Возраст: b>%d/b>" % age def manage_setAge(self, age): self.age = age def manage_delete(self, category): for c in category: self.delete(c) # self.delete не показан то метод manage_setAge вызовется с целым age, или manage_delete - со списком нажатых checkbox'ов. Остальные переменные формы можно извлечь из общего пространства имен, доступного через self. Публикация через метод GET и того проще: на запрос http://www.my.server/root/subobject/sub2/myObject/view?age:int=12 ZPublisher обходит иерархию объектов (траверс с учетом механизма acquisition, о чем позже) и публикует myObject - у объекта вызывается метод view с целочисленным параметром. ACQUISITION - заимствование вместо наследования Acquisition - это механизм запроса значений переменных из текущего контекста. Переведем это слово как "заимствование" атрибутов; относительно адекватный перевод. Заимствование значения атрибута происходит из контекста объекта. Контекстов бывает два - статический, возникающий в момент создания объекта, |
|
|