Ясно, как создать URLPattern, который диспетчеризирует от URL regex:
(r'^books/$', books),
куда книги могут далее диспетчеризировать на методе запроса:
def books(request):
if request.method == 'POST':
...
else:
...
Я хотел бы знать, существует ли идиоматический способ включать метод запроса в URLPattern, сохраняя всю отправку/маршрутную информацию в единственном месте, таком как:
(r'^books/$', GET, retrieve-book),
(r'^books/$', POST, update-books),
(r'^books/$', PUT, create-books),
Причина, по которой это делается как метод единого представления, заключается в том, что вы обычно визуализируете какое-то содержимое страницы в качестве контекста для формы, которую собираетесь отправить.
В любом случае, моя причина ответить на него так: из вашего образца URLConf похоже, что вы создаете веб-сервис REST с Django - в этом случае вам действительно может быть полезно использовать довольно хороший django -piston для автоматического создания ваших ресурсов / коллекций. Он использует обработчики на основе классов, которые автоматически перенаправляют на соответствующий метод (get-books, update-books, create-books в вашем случае) на основе метода HTTP в запросе
UPDATE (четыре года спустя!), А django- поршень все еще существует (и работает), Django REST Framework в наши дни является гораздо более сложным, документированным и расширенным выбором.
Стандартный Django не имеет никакого механизма для различения методов запроса, кроме того, что вы использовали во втором фрагменте:
if request.method == 'POST':
...
Однако, есть сторонние приложения и фрагменты, которые пытаются сделать обработку методов немного чище, используя представления на основе классов. Смотрите, например, этот сниппет (найден из этого вопроса SO о представлениях классов).
Лично я не уверен, что это хорошая идея. Стандартный метод Django настолько... стандартен... что я думаю, что это вносит дополнительную путаницу и сложность там, где это действительно не нужно.