Cha*_*des 3 django redundancy request args keyword-argument
在我看来,在 Django 的基于类的通用视图中,参数request和argskwargs传输,既作为视图实例属性,又作为方法参数。
我到底是什么意思?
Class 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)
Run Code Online (Sandbox Code Playgroud)
该函数首先将request、args和设置为视图实例属性,然后使用所有这些作为参数kwargs调用视图的方法。dispatch如果有的话,这样做的具体目的是什么?这不是多余的吗?
尽管某些CBV 方法(例如dispatch())将参数直接传递给它们,但其他方法则不然。当然,您可能希望定义自己的方法来访问这些值,而不必传递它们。
CBV 的部分要点是您不必过多考虑控制流(谁在调用什么);相反,您可以只覆盖一小部分功能(例如get_context_data())。因此,更自然地考虑附加到对象的数据,而不是在方法之间传递的参数。
为什么不完全消除争论呢?可能是因为它更适合传统的基于函数的视图。例如,许多 FBV 都有一个等效的 CBV,它在get()方法中使用完全相同的代码。
| 归档时间: |
|
| 查看次数: |
5314 次 |
| 最近记录: |