mr_*_*ing 3 python django mixins
我是 Django 新手,通常使用基于函数的视图。但我发现使用 mixins 和基于类的视图更强大。我做了很多研究,但我仍然对如何使用 Mixins 感到困惑。为什么 Mixin 是跨多个类重用代码的绝佳方式?
何时或为何应使用基于类的视图?
如果您向我展示一个示例或比文档中更好的解释方式,我将不胜感激。
我认为该文档非常完美:https://docs.djangoproject.com/en/3.1/topics/class-based-views/mixins/
到目前为止,这就是我使用 mixins 的方式。
对于模型:假设您希望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
Run Code Online (Sandbox Code Playgroud)
然后我会用 mixin 扩展我的其他模型。所有继承的模型都TimestampableMixin将包含这些字段。请记住,您可以在该Post模型中添加更多 mixin,例如TaggingMixin等。
class Post(TimestampableMixin, TaggingMixin):
...
Run Code Online (Sandbox Code Playgroud)
我发现自己并不经常在视图中使用它们,但有一次我使用它们反复从 url 中获取相同的内容context_data和一些内容。kwargs
所以我创建了一个DashboardMixin具有以下实现方法的。
class DashboardMixin:
def get_context_data(self):
...
# and then in the Views
class IndexView(DashboardMixin, View):
...
Run Code Online (Sandbox Code Playgroud)
请记住MRO(方法解析顺序)!- 这就是 python 处理多重继承的方式。
这就是我在 Django 中使用 mixin 的方式。您可以将其应用到框架的几乎每个方面。例如。在 django 的管理站点中,ModelAdmin在Forms等中扩展和添加更多功能。我链接的文档解释了所有这些,当您阅读它时,您会得到更好的想法。
| 归档时间: |
|
| 查看次数: |
3407 次 |
| 最近记录: |