Обнаружение события, которое называется CGI-скриптом - PullRequest
0 голосов
/ 19 мая 2010

Я хочу, чтобы мой CGI-сценарий мог выполнять разные действия в зависимости от того, какое действие инициировало вызов сценария.

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

Должен ли я сделать что-то вроде добавления имени формы / кнопки в конец POST данных, отправленных в jQuery, и затем .pop его отключения в скрипте?

Или есть какие-то другие данные, которые уже отправлены в POST, которые я мог бы получить от FieldStorage, которые дали бы мне информацию, необходимую для решения, что должен делать скрипт, когда он вызывается?

А что, если я не использовал javascript? Должен ли я иметь скрытое поле, которое будет отправлено с именем формы / кнопки?

Или лучше использовать разные целевые скрипты для каждой кнопки на странице?

1 Ответ

1 голос
/ 15 июня 2010

POST-запрос включает в себя все элементы формы, которую вы отправляете. Итак, если у вас есть форма с несколькими кнопками отправки:

   <form id="mytestform" target="/cgi-bin/script.py" method="POST">
     <input type="submit" name="ClearDB" value="Clear DB"/>
     <input type="submit" name="TestDB" value="Test DB"/>
     <input type="text" name="hostname" />
   </form>

тогда вы получите POST-запрос с данными запроса, похожими на: ClearDB = Clear% 20DB & hostname = каждый раз, когда вы отправляете форму с помощью кнопки «Очистить БД»

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

<form id="mytestform" target="/cgi-bin/script.py" method="POST">
    <input type="submit" name="action" value="Clear"/>
    <input type="submit" name="action" value="Test"/>
</form>

Тогда вам просто нужно проверить значение элемента запроса, который вы получите (в приведенном выше случае это будет "действие").

Поэтому в Python вам просто нужно получить значение, которое вы получили с помощью класса FieldStorage, используя метод FieldStorage.getfirst ().

...