Python 是";def post";及;if.request.method==POST";相同的?

Python 是";def post";及;if.request.method==POST";相同的?,python,django,Python,Django,def post和if.request.method==post是否相同 我见过一些人使用defpost(self,request),还有一些人使用if.request.method==“post”。它们似乎都很有效,至少在我所看到的任务中是如此 有什么不同吗?我认为您混合了两种主要的Django方法:和。 如果request.method==POST-FBV, def post(自我,请求)-CBV. 在FBV中,您通常将视图作为函数编写,其中有条件地检查所使用的方法。在CBV中,您正在覆盖某

def post
if.request.method==post
是否相同

我见过一些人使用
defpost(self,request)
,还有一些人使用
if.request.method==“post”
。它们似乎都很有效,至少在我所看到的任务中是如此


有什么不同吗?

我认为您混合了两种主要的Django方法:和。
如果request.method==POST
-FBV,
def post(自我,请求)
-CBV.
在FBV中,您通常将视图作为函数编写,其中有条件地检查所使用的方法。在CBV中,您正在覆盖某些Django内置类和该类中的内置方法。
是的,这是相同的动作。

另外,对于初学者来说,开始学习基于函数的视图更容易。

我想你说的是基于类的视图。在这种情况下,如果不更改路由机制,答案是

让我们看一看。通常基于类的视图是此类的子类,因此继承此类的行为:


当然,所有这些函数都存在(情况并非总是如此)。此外,
options(…)
函数会自动生成:它检查定义了哪些函数,并返回相应方法的列表。

您能否举例说明如何使用def post?通常是的,因为基于类的视图会对这些函数执行一些“路由”。但是你当然可以修补这个路由,从而让它以不同的方式工作。@BibekBhandari:我想他们的意思是在基于类的视图中
post
。是的,基于类的视图
class View:

    # ...

    http_method_names = ['get', 'post', 'put', 'patch',
                         'delete', 'head', 'options', 'trace']

    # ...

    @classonlymethod
    def as_view(cls, **initkwargs):
        # ...
        def view(request, *args, **kwargs):
            self = cls(**initkwargs)
            if hasattr(self, 'get') and not hasattr(self, 'head'):
                self.head = self.get
            self.request = request
            self.args = args
            self.kwargs = kwargs
            return self.dispatch(request, *args, **kwargs)
        # ...
        return view

    def dispatch(self, request, *args, **kwargs):
        # ...
        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)


    # ...
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)