我有一个由 APIView 继承的视图,并且我只在其中实现了 GET 方法。
class MyView(APIView):
def get(self, request, id):
# do something
但是当我调用 getattr(ClassInstance, "http_method_names", []) 时,我会得到所有 HTTP 方法的列表,即使它们尚未实现。
我有一个由 APIView 继承的视图,并且我只在其中实现了 GET 方法。
class MyView(APIView):
def get(self, request, id):
# do something
但是当我调用 getattr(ClassInstance, "http_method_names", []) 时,我会得到所有 HTTP 方法的列表,即使它们尚未实现。
[ Django -doc]是一个属性,它默认列出所有HTTP 方法,因此:
.http_method_names
通常情况下,除非您覆盖它,否则它将始终返回该列表。如果您从已定义方法的视图继承
.post(…)
,但您不想公开该方法,则这可能很有用,例如:或者,从技术上讲,您可以
http_method_names
使用自定义方法扩展列表,但我强烈建议不要这样做。为了找出视图实现了哪些方法,您可以使用
_allowed_methods(…)
,从而检查相应的.get(…)
方法是否被允许。因此,您无法自省允许的方法:
您可以创建一个实例并使用
_allowed_methods()
:因此,如果
ClassInstance
它是对类型本身的引用,或者ClassInstance._allowed_method()
如果它已经是一个视图对象则使用它。