Tenho uma view sendo herdada pelo APIView e implementei apenas o método GET nela.
class MyView(APIView):
def get(self, request, id):
# do something
Mas quando chamo getattr(ClassInstance, "http_method_names", []) recebo uma lista de todos os métodos HTTP, mesmo que eles não estejam implementados.
O [Django-doc] é um atributo que, por padrão, lista todos os métodos HTTP, então:
.http_method_names
Normalmente, ele sempre retornará essa lista, a menos que você a substitua. Isso pode ser útil se você herdar de uma view que, por exemplo, definiu um
.post(…)
método, mas não quer expor isso, como:Ou você pode, tecnicamente falando, expandir a
http_method_names
lista com um método personalizado, embora eu recomende fortemente não fazer isso.Para descobrir quais métodos a visualização implementa, você pode usar o
_allowed_methods(…)
, que verifica se o.get(…)
método correspondente é permitido ou não.Portanto, você não pode introspectar os métodos permitidos com:
Você pode simplesmente criar uma instância e trabalhar com
_allowed_methods()
:Se
ClassInstance
for, portanto, uma referência ao próprio tipo, ou useClassInstance._allowed_method()
se já for um objeto de visualização .