gpt4 book ai didi

基于 Django 类的 View - 请求、args 和 kwargs 对象

转载 作者:行者123 更新时间:2023-12-04 02:32:14 25 4
gpt4 key购买 nike

在我看来,在 Django 的基于类的通用 View 中,参数 requestargskwargs 从一个方法传递到另一个方法,既作为 View 实例属性,也作为方法参数。

我到底是什么意思?

django.views.generic.base.View,定义了以下函数,由其as_view方法调用:

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)

该函数首先将requestargskwargs设置为 View 实例属性,然后调用 View 的dispatch 以所有这些作为参数的方法。如果有的话,这样做的目的到底是什么?不是多余的吗?

最佳答案

尽管一些 CBV 方法(如dispatch())将参数直接传递给它们,但其他方法则没有。当然,您可能希望定义自己的方法来访问这些值而无需传递它们。

CBV 的部分要点是您不必过多考虑控制流( 在调用什么);相反,您可以只覆盖一小部分功能(例如 get_context_data())。因此,更自然的做法是考虑附加到对象的数据,而不是方法之间传递的参数。

为什么不完全摆脱争论呢?可能是因为它更适合传统的基于函数的 View 。例如,许多 FBV 将有一个 CBV 等价物,它在 get() 方法中使用完全相同的代码。

关于基于 Django 类的 View - 请求、args 和 kwargs 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21383063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com