POST / GET привязки в ракетке - PullRequest
5 голосов
/ 22 июня 2010

Есть ли встроенный способ получить параметры POST / GET в Racket? extract-binding и друзья делают то, что я хочу, но есть прикрепленная записка о потенциальных угрозах безопасности, связанных с загрузкой файлов, которая заканчивается

Поэтому мы рекомендуем против их использовать, но они предусмотрены для совместимость со старым кодом.

Лучшее, что я могу понять, это (и простите меня заранее)

(bytes->string/utf-8 (binding:form-value (bindings-assq (string->bytes/utf-8 "[field_name_here]") (request-bindings/raw req))))

но это кажется неоправданно сложным (и, похоже, оно будет страдать от некоторых тех же ошибок, описанных в разделе «Привязки»)

Существует ли более или менее стандартный, не содержащий ошибок способ получения значения POST / GET-переменной с учетом имени поля и запроса? Или, еще лучше, способ вернуть коллекцию значений POST / GET в виде списка / хэша / a-списка? За исключением любого из них, есть ли функция, которая будет делать то же самое, но только для переменных POST, игнорируя GET?

1 Ответ

3 голосов
/ 23 июня 2010

извлечение привязки плохо, потому что оно нечувствительно к регистру, очень грязно для входных данных, которые возвращаются несколько раз, не имеет способа справиться с загрузкой файлов и автоматически предполагает, что все является UTF-8, что необязательно верно.Если вы можете принять эти проблемы, не стесняйтесь использовать их.

Написанный вами фрагмент работает, когда данные имеют формат UTF-8 и когда возвращается только одно поле.Вы можете определить, что это функция, и не писать ее много раз.

В общем, я рекомендую использовать формы для работы с формами и их значениями.

Теперь ваши вопросы ...

"Существует ли более или менее стандартный, не содержащий ошибок способ получения значения POST / GET-переменной с учетом имени поля и запроса?"

Что у вас есть стандартвещь, хотя вы ошибочно предполагаете, что существует только одно значение.Когда их несколько, вам нужно отфильтровать привязки к имени поля.Точно так же вам не нужно , чтобы превратить значение в строку, вы можете просто оставить его в байтах.

"Или, еще лучше, способ вернуть коллекциюPOST / GET значения в виде списка / хэша / a-списка? "

Вот что делает request-bindings / raw.Это список связывания?объекты.Не имеет смысла превращать его в хеш из-за множественных возвращаемых значений.

"Запрещает ли какая-либо из них, есть ли функция, которая будет делать то же самое, но только для переменных POST, игнорируя GET?"

Веб-сервер скрывает разницу между POST и GET от вас.Вы можете проверить URI и необработанные данные, чтобы восстановить их, но вам придется анализировать их самостоятельно.Я не рекомендую это.

Джей

...