Вот где можно почитать: http://djbook.ru/rel1.7/ref/class-based-views/flattened-index.html , а можно почитать код класса View. Там такое:
def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
То есть, первым делом класс вьюхи смотрит, каким методом запрошена страница, и если метод среди разрешённых, то ищет среди своих методов класса функцию с именем, совпадающим с именем http-метода. Если метод не находится в списке разрешённых, либо нет функции-обработчика этого метода, то вызывается обработчик http_method_not_allowed(). Вот он:
def http_method_not_allowed(self, request, *args, **kwargs):
logger.warning('Method Not Allowed (%s): %s', request.method, request.path,
extra={
'status_code': 405,
'request': self.request
}
)
return http.HttpResponseNotAllowed(self._allowed_methods())
Вот список в принципе разрешённых методов:
http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
В самом View, кстати, не определены методы get() или post(). Они определены уже в унаследованных. Можно посмотреть, как это сделано, и сделать так же в своём классе. А можно посмотреть уже готовые миксины, вероятнее всего какой-либо из них может дать нужную функциональность.