Междоменное перенаправление на частично заполненную форму в веб-приложении Django - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть HTML-форма в моем веб-приложении Django (НЕ реализованная с использованием форм Django), которая выполняет запрос POST.

Теперь я хочу реализовать такую ​​функцию, чтобы другие веб-приложения, не обязательно django, из разныхдомены, могут отправлять некоторые данные в мое приложение и перенаправляться на веб-страницу с помощью этой формы, частично заполненной этими данными (данные могут быть в формате JSON).

Помимо перенаправления, после того, как пользователь нажмет кнопку отправить в моей формеЯ также хотел бы отправить сообщение на другой сервер с некоторой краткой текстовой информацией.

Я не уверен, каков наилучший способ реализовать это.Интерфейс REST, такой как Piston?

Не могли бы вы дать мне несколько общих указаний, которым я должен следовать?

1 Ответ

1 голос
/ 27 сентября 2011

Вы должны создать представление, которое обрабатывает данные POST из формы и внешних веб-приложений.

Вы сможете проверить, поступают ли данные, которые вы получаете в представлении, с вашего сайта или другого сайта.проверяя request.META ['HTTP_REFERER'].

Если это с вашего сайта, вы можете просто обработать форму, как обычно.

Однако, если это с внешнего сайта,вместо этого вы должны сделать шаблон с формой в нем.Вы можете поместить информацию, полученную с внешнего сайта, в контекст, чтобы можно было предварительно заполнить форму в шаблоне.

Вы также должны включить флаг в форму, чтобы сказать, что это было от внешнегоsite, что-то вроде:

<input type="hidden" name="external_site_url" value="{{ external_site_url }}">

После отправки этой формы вы можете проверить наличие external_site_url.Если оно существует, вы можете отправить сообщение на другой сервер.

Обратите внимание: поскольку вы хотите, чтобы другие приложения использовали ваше представление, вам придется отключить защиту CSRF для представления (https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#csrf-protection-should-be-disabled-for-just-a-few-views).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...