In ASP.NET MVC, können Sie die AcceptVerbs verwenden Attribut einen View-Funktion mit einem Verb korrelieren:Http Verb Dekorator für Django?
public ActionResult Create()
{
// do get stuff
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
// do post stuff
}
The Django Book schlägt vor, etwa wie folgt:
def method_splitter(request, *args, **kwargs):
get_view = kwargs.pop('GET', None)
post_view = kwargs.pop('POST', None)
if request.method == 'GET' and get_view is not None:
return get_view(request, *args, **kwargs)
elif request.method == 'POST' and post_view is not None:
return post_view(request, *args, **kwargs)
raise Http404
urls.py:
urlpatterns = patterns('',
# ...
(r'^somepage/$', views.method_splitter, {'GET': views.some_page_get,
'POST': views.some_page_post}),
# ...
)
Das scheint ein bisschen hässlich für mich - gibt es einen Dekorator, der ein HTTP-Verb mit einer Ansicht, ASP.NET MVC-Stil oder einem anderen Akzeptieren assoziieren kann d Möglichkeit dies zu tun?
Dies ist in der Tat der Weg, es zu tun. Beachten Sie, dass es dort auch einen Decorator-Generator gibt, mit dem Sie Dekoratoren für beliebige Kombinationen von Methoden erstellen können. (und ich habe keine Ahnung, warum Sie downvoted für die offensichtliche und richtige Antwort auf die Frage ...) –
Ich glaube, das ist nicht die richtige Antwort, weil require_http_methods() ist ein Filter, nicht Dispatcher. Man kann @require_http_methods ("GET") nicht für eine Funktion verwenden, @require_http_methods ("POST") für eine andere (mit demselben Namen!), Und Django sollte die richtige Methode wählen, um nach Methodenverb zu rufen. – drdaeman