Как можно диспетчеризировать на методе запроса в Django URLpatterns?

Ясно, как создать 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),
14
задан Robert Campbell 3 June 2010 в 08:44
поделиться

2 ответа

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

В любом случае, моя причина ответить на него так: из вашего образца URLConf похоже, что вы создаете веб-сервис REST с Django - в этом случае вам действительно может быть полезно использовать довольно хороший django -piston для автоматического создания ваших ресурсов / коллекций. Он использует обработчики на основе классов, которые автоматически перенаправляют на соответствующий метод (get-books, update-books, create-books в вашем случае) на основе метода HTTP в запросе

UPDATE (четыре года спустя!), А django- поршень все еще существует (и работает), Django REST Framework в наши дни является гораздо более сложным, документированным и расширенным выбором.

6
ответ дан 1 December 2019 в 16:24
поделиться

Стандартный Django не имеет никакого механизма для различения методов запроса, кроме того, что вы использовали во втором фрагменте:

if request.method == 'POST':
    ...

Однако, есть сторонние приложения и фрагменты, которые пытаются сделать обработку методов немного чище, используя представления на основе классов. Смотрите, например, этот сниппет (найден из этого вопроса SO о представлениях классов).

Лично я не уверен, что это хорошая идея. Стандартный метод Django настолько... стандартен... что я думаю, что это вносит дополнительную путаницу и сложность там, где это действительно не нужно.

1
ответ дан 1 December 2019 в 16:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: