但是请注意,您可以将as_view和dispatch(..)函数子类化,从而更改此行为。在
此外,严格地说,您可以编写自己的View类,当然可以有完全不同的行为,但我假设这并不是这个问题的真正范围。在
因此,基于类的视图基本上执行如下操作(这不是代码的外观,但从语义上讲,它与以下内容大致相同):def some_view(request, *args, **kwargs):
if request.method == 'GET':
return self.get(request, *args, **kwargs)
if request.method == 'POST':
return self.post(request, *args, **kwargs)
if request.method == 'PUT':
return self.put(request, *args, **kwargs)
if request.method == 'PATCH':
return self.patch(request, *args, **kwargs)
if request.method == 'DELETE':
return self.delete(request, *args, **kwargs)
if request.method == 'HEAD':
return self.head(request, *args, **kwargs)
if request.method == 'OPTIONS':
return self.options(request, *args, **kwargs)
if request.method == 'TRACE':
return self.trace(request, *args, **kwargs)
else:
return self.http_method_not_allowed(request, *args, **kwargs)
当然,所有这些函数都存在(也就是说,不是总是如此)。此外,options(..)函数是自动生成的:它检查定义了哪些函数,并返回相应方法的列表。在