Фон: Я сейчас создаю проект в пирамиде. Он использует сеансы beaker и SQLAlchemy как DB-backend.Есть ли пирамидальный пакет для хранения информации, связанной с информацией, связанной с информацией (избегайте зеркалирования скрытых полей)?
Некоторые формы содержат информацию в скрытых полях с единственной целью предоставить ее представлению, обрабатывающему сообщение, пользователь никогда не видит их и не нуждается. Пример:
Объект DB может быть отредактирован пользователем. Поскольку все поля данных объекта, включая имя, могут редактироваться, идентификатор объекта помещается в скрытое поле, поэтому представление может запрашивать объект и обновлять его. Этот подход имеет некоторые недостатки:
- Идентификатор моих сущностей не касается моих пользователей. Они не должны даже знать об этом.
- Данные, повторно отправленные клиентом, могут быть переделаны. Кто-то может попытаться получить доступ к другим объектам, создав здесь другой идентификатор.
- В других сценариях может быть больше зеркальных данных, чем просто идентификатор (возможно, возвращение к URL-адресу, возможно, куда-то еще). Использование скрытых полей для этого будет передавать данные клиенту и обратно, бесполезно (пропускную способность) и заставляет его проверять.
Передача данных по незащищенным каналам (клиенту) без необходимости - это просто неправильно. Решение не так сложно: сохранить эту информацию на сервере (в сеансе или БД) и сделать его доступным с помощью ключа (form-id?), Аналогичного сеансу, с идентификатором сеанса. Поместите этот анонимный токен в скрытое поле. Это будет единственное скрытое поле, необходимое в форме. Все остальное будет храниться на сервере и быть восстановлено из представления, отвечающего на пост-запрос (ну, у меня все равно будет мой токен CSRF, потому что он во всех моих почтовых запросах). Это также облегчило бы предоставление форм тайм-ауту, так как вы можете сделать идентификатор формы истечением через несколько часов или около того.
Если я правильно помню, drupals действительно поставляет это по умолчанию. Я бы не ожидал, что сама пирамида будет поддерживать это, но представьте, что должен быть пакет, делающий это, используя предоставленный пирамидой объект сеанса, все еще не смог найти. Я уверен, что могу написать что-то полезное, но зачем это делать, если там может быть что-то удивительное?
Кто-нибудь знает о таких пакетах?
нашел вопрос относительно Друпал функции I mentiond: http://drupal.stackexchange.com/questions/57336/what -is-the-difference-between-hidden-and-value-types-in-form-api – kratenko