- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Django 和相互交互的应用程序很容易遇到导入问题。我的问题很简单:
最小化循环导入的公认流程是什么,或者是否有人提出了公认的编码标准来减少他们愿意分享的这些?
我正在寻找可以标准化的良好原则。
型号
class Program(models.Model):
group = models.ForeignKey(Group, related_name="%(app_label)s_%(class)s_related")
对比
class Program(models.Model):
group = models.ForeignKey('auth.Group', related_name="%(app_label)s_%(class)s_related")
浏览次数:
class ProgramDetailView(DetailView):
"""Detail view of the EEP Program"""
def get_queryset(self):
"""Narrow this based on your company"""
from apps.company.models import Company
company = Company.objects.get(name="foo")
return Program.objects.filter(company = company)
vs(这往往会导致问题..
from apps.company.models import Company
class ProgramDetailView(DetailView):
"""Detail view of the EEP Program"""
def get_queryset(self):
"""Narrow this based on your company"""
company = Company.objects.get(name="foo")
return Program.objects.filter(company = company)
这样做的问题是您往往会在各处进行大量导入..
最佳答案
多年来,我根据我的观察对一些模式进行了标准化我如何开发网络应用程序。
我不知道你对模块化和代码重用的标准是什么,但是遵循简单的规则/模式对我处理一些相当大的问题有很大帮助项目。
我注意到我的许多模型都有一些共同的属性。例如我更喜欢使用 UUID 而不是简单的自动递增整数作为主键。
所以我有这个抽象模型。
class UUIDModel(models.Model):
id = UUIDField(primary_key=True, auto=True) # There are many implementation of this on the web. Choose your favorite.
class Meta:
abstract = True
我的许多模型都需要激活
的概念。所以我有另一个抽象模型,与此类似:
class ActivatedModel(Model):
is_active = models.BooleanField(default=False)
def activate(self, save=True):
if self.is_active:
raise Exception('Already activated')
self.is_active = True
if save:
self.save()
class Meta:
abstract = True
我还使用许多其他抽象模型来跟踪创建时间和修改,或者如果某些内容已最终确定
并且无法进一步修改,等等。
所有这些抽象模型都位于核心
应用程序中。我就是这么调用它的。除了 core
应用程序之外,我还有一个 tasks
应用程序。 tasks
应用程序提供摘要增强与我相关的任何接口(interface)的模型 celery我经常使用它。
tasks
应用可以从 core
应用导入模型,但反之则不行。
我还有一个 mms
应用程序,它处理多媒体创建和转换(缩略图等)。 mms
可以从以前的应用程序导入模型。所以我们现在的导入关系是这样的:core ->tasks ->mms。
我创建的每个其他应用程序都是特定于我正在开发和构建的当前项目的以前的应用程序。所以基本上我尝试使用“单向导入”(如果你可以这么称呼的话)。
我最终得到的模型看起来与此类似:
# models.py of an app called "articles"
from core.models import UUIDModel, ActivatedModel
from tasks.models import ManagedTasksModel
class Article(UUIDModel, ActivatedModel, ManagedTasksModel):
title = models.CharField()
# blah...
如果应用程序变得太大,我会通过将 models.py
模块分解为“微观管理”应用程序较小的模块遵循上述规则。我发现这涵盖了我的大部分需求。
我无法评论基于类的 View ,因为老实说我不喜欢它们,而且几乎总是让我写更多的代码而不是更少。每个人都有自己的。我更喜欢使用助手实用功能并充分利用诸如context processors之类的东西, 里面我的 View 功能。
我希望我的回答符合您的问题。
编辑:我刚刚注意到您对 lated_name
的使用,我认为这错过了该选项的要点。请参阅以下示例:
class Message(models.Model):
sender = models.ForeignKey(User, related_name='messages_sent')
receiver = models.ForeignKey(User, related_name='messages_received')
body = models.Textfield()
通过上面的模型我们可以做到这一点,这是非常可读的:
u1 = User.objects.get(...)
received = u1.messages_received.all()
...它描述了这种关系的功能目的。所以 lated_name
不是仅用于具有唯一的相关名称。
关于python - Django 应用间导入的可接受做法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253734/
如果您想分享更多信息,可以在这里找到整个资源 指针: https://github.com/sergiotapia/DreamInCode.Net 基本上,我的API将为其他开发人员提供
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。 我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseS
所以我想知道一些我应该避免在 javascript 中做的事情以获得良好的 SEO 排名。在我的下一个站点中,我将广泛使用 jquery 和 javascript,但不想牺牲 SEO。那么您认为我应该
基本上,我想知道什么是避免 future CSS 代码出现问题和混淆的最佳方法... 像这样命名 CSS 属性: div#content ul#navigation div.float-left (真
我是一名优秀的程序员,十分优秀!