你能给我展示一个在 Django 中使用基于 class 的视图的混合示例吗?有什么用处?
Can you show me an example of Mixins with class-based views in Django? What is the usage?
我是Django的新手,我通常使用基于函数的视图。但我发现将 mixins 与基于 class 的视图结合使用会更加强大。我做了很多研究,但我仍然对如何使用 Mixins 感到困惑。为什么 Mixins 是跨多个 class 重用代码的绝佳方式?
何时或为何我应该使用基于 class 的视图?
如果你给我一个例子或比文档中更好的解释方式,我将不胜感激。
我认为相关文档非常完美:https://docs.djangoproject.com/en/3.1/topics/class-based-views/mixins/
到目前为止,这就是我使用 mixin 的方式。
型号
对于模型:假设您希望在您拥有的每个模型中都有 created_at, updated_at
字段。我会创建一个 TimestampableMixin,它看起来像这样。
(https://docs.djangoproject.com/en/3.1/topics/db/models/#abstract-base-classes)(为什么 abstract
?)
class TimestampableMixin(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
然后我会用 mixin 扩展我的其他模型。所有继承 TimestampableMixin
的模型都将包含这些字段。请记住,您可以在该 Post
模型中添加更多混入,例如 TaggingMixin
等
class Post(TimestampableMixin, TaggingMixin):
...
观看次数
我发现自己在我的观点中并不经常使用它们,但有一次我使用它们来反复从 url 中获得相同的 context_data
和一些 kwargs
。
所以我创建了一个 DashboardMixin
具有以下实现方法。
class DashboardMixin:
def get_context_data(self):
...
# and then in the Views
class IndexView(DashboardMixin, View):
...
请记住 MRO(Method Resolution Order)! - 这就是 python 处理多重继承的方式。
这就是我在 Django 中使用 mixin 的方式。您几乎可以在框架的每个方面应用它。例如。在 django 的管理站点中,向 ModelAdmin
、Forms 等扩展和添加更多功能。我链接的文档解释了所有这些,当你阅读它时你会得到更好的想法。
我是Django的新手,我通常使用基于函数的视图。但我发现将 mixins 与基于 class 的视图结合使用会更加强大。我做了很多研究,但我仍然对如何使用 Mixins 感到困惑。为什么 Mixins 是跨多个 class 重用代码的绝佳方式?
何时或为何我应该使用基于 class 的视图?
如果你给我一个例子或比文档中更好的解释方式,我将不胜感激。
我认为相关文档非常完美:https://docs.djangoproject.com/en/3.1/topics/class-based-views/mixins/
到目前为止,这就是我使用 mixin 的方式。
型号
对于模型:假设您希望在您拥有的每个模型中都有 created_at, updated_at
字段。我会创建一个 TimestampableMixin,它看起来像这样。
(https://docs.djangoproject.com/en/3.1/topics/db/models/#abstract-base-classes)(为什么 abstract
?)
class TimestampableMixin(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
然后我会用 mixin 扩展我的其他模型。所有继承 TimestampableMixin
的模型都将包含这些字段。请记住,您可以在该 Post
模型中添加更多混入,例如 TaggingMixin
等
class Post(TimestampableMixin, TaggingMixin):
...
观看次数
我发现自己在我的观点中并不经常使用它们,但有一次我使用它们来反复从 url 中获得相同的 context_data
和一些 kwargs
。
所以我创建了一个 DashboardMixin
具有以下实现方法。
class DashboardMixin:
def get_context_data(self):
...
# and then in the Views
class IndexView(DashboardMixin, View):
...
请记住 MRO(Method Resolution Order)! - 这就是 python 处理多重继承的方式。
这就是我在 Django 中使用 mixin 的方式。您几乎可以在框架的每个方面应用它。例如。在 django 的管理站点中,向 ModelAdmin
、Forms 等扩展和添加更多功能。我链接的文档解释了所有这些,当你阅读它时你会得到更好的想法。