首页 > 解决方案 > 处理请求的两种方式——只是写法不同

问题描述

我在 github 上查看了一些不同的代码,发现了一些令人困惑的东西。下面的代码有什么区别吗?

class RandomView(View):
    def get(self, *args, **kwargs):
        return render(self.request, 'random_template.html)

相对

class RandomView(View):
    def get(self, request, *args, **kwargs):
        return render(request, 'random_template.html)

对我来说,这会做同样的事情,但公平地说,我的知识非常有限。一种被认为是不好的做法吗?或者也许只是偏好?

标签: django

解决方案


它们指向同一个对象。self.request 在从 View.as_view() 返回的工厂函数中分配。我猜想显式传递请求参数的原因是为了更容易在基于类的视图和函数视图之间进行转换。并且也更加明确了get等方法使用了request对象。

我建议您遵循 django 源代码和文档中的示例中的约定,并使用作为参数传递的请求而不是 self.request。

在reddit上找到了这个答案


推荐阅读