Как вы можете отправить по запросу метод в Django URLpatterns? - PullRequest
13 голосов
/ 03 июня 2010

Понятно, как создать URLPattern, который отправляет из регулярного выражения URL:

(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),

Ответы [ 2 ]

6 голосов
/ 03 июня 2010

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

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

ОБНОВЛЕНИЕ (четыре года спустя!), Хотя django-поршень все еще существует (и работает), Django REST Framework - это гораздо более сложный, задокументированный и расширенный выбор в наши дни.

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

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

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

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

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

...