Что-то, что имеет побочные эффекты, такие как изменение хранилища (например, путем создания нового объекта), должно НЕ быть HTTP GET
- GET должен по существу выполнять только операции «чтения». Это не педантизм, это ключевой элемент семантики HTTP - браузерам, кешам, прокси и т. Д. Разрешено работать с GET как операции только для чтения (например, путем кэширования результатов и не передачи запроса на сервер, если они может удовлетворить его из кеша).
Для модификаций используйте HTTP-глаголы, такие как POST (наиболее популярный, потому что все браузеры реализуют его правильно) или для специализированных операций PUT (для создания новых объектов) или DELETE (для удаления объектов). Я предполагаю, что вы будете использовать POST для поддержки различных браузеров.
Чтобы получить POST из браузера, вам потребуется либо Javascript wizardy, либо простая старая форма с методом = post - для простоты я приму последнее.
Если вы используете Django 1.0 (который поддерживает движок приложений), у него есть свои собственные механизмы для создания, проверки и принятия форм на основе моделей. Другие фреймворки имеют свои аналогичные расширенные слои.
Если вы хотите избежать «богатых» фреймворков, вам придется вручную внедрять шаблоны для своих HTML-форм, направить их (с помощью какой-либо диспетчеризации URL-адресов, например, в app.yaml) на ваш обработчик, реализующий с помощью def post(self):
, получить данные из запроса, проверить их, сформировать новый объект, поместить их, отобразить страницу подтверждения.
Какая часть или части процедуры вам неясны? Название вашего вопроса сфокусировано именно на ссылочных свойствах, но я не уверен, какую проблему они вам представляют, в частности - из текста вашего вопроса вы, кажется, находитесь на правильном пути.
Редактировать : ОП пояснил в комментарии, что его проблема в том, как сделать что-то вроде:
"<a href="/newtopic?id={{group.key.id}}" >New topic </a>"
работа. Есть несколько способов сделать это. Если URL-адрес новой темы обслуживается статической формой, обработчик для post "action" этой формы может вернуться к этому id=
через заголовок Referer:
(печально известное, но нефиксированное неправильное написание), но это немного неуклюжий и хрупкий. Лучше, чтобы newtopic URI обслуживался обработчиком, чей def get
получает id=
из запроса и вставляет его в результирующий шаблон формы - например, в скрытое поле ввода. Шаблон этой формы должен содержать (среди других полей):
<INPUT TYPE=hidden NAME=thegroupid VALUE={{ theid }}> </INPUT>
поместите theid
в контекст, с которым вы отображаете этот шаблон, и в запросе будет наконец получено def post
действия, получающего форму.