django: generic class view + POST = HTTP 405 (Method not allowed)

migajek picture migajek · Dec 19, 2011 · Viewed 14.7k times · Source

Recently I've started converting some of the view functions to Generic Views. Converting the function which was expected to handle POST request (via AJAX form) results in "405 Method not allowed" HTTP exception. I'm sure is not about CSRF: Ajax sends valid token, changing the generic view back to view function (in the test case, they're essentially the same) fixes the problem, and - lastly - for testing purposes, I've disabled CSRF middleware. Did anyone experienced similar problems?

Answer

Kirill picture Kirill · Dec 19, 2011

I suppose you are using class-based views. If so then you need to define post method in your view or use mixin which does it (django.views.generic.edit.ProcessFormView for example). If you want to fully understand why this is necessary then look at dispatch method of django.views.generic.base.View.