django:将DRY和代码重用提高到一个新水平吗?

时间:2019-05-19 01:19:24

标签: python django dry code-reuse

在django文化中,我遇到了应用程序重用的概念,但没有遇到代码段重用的概念。这是片段重用的含义示例:我有一个函数getDateTimeObjFromString(sDateTime),显然您传递了一个字符串日期时间,并且它返回了一个python日期时间对象。

在1980年代末期或1990年代初,我在FoxPro开发者大会上接触了代码片段重用的想法。如果您为特定问题编写代码,并发现它在项目中的其他地方很有用,请将其移至项目库。如果您发现该代码对其他项目有用,请将其移至所有项目都可以访问的通用库。

(在FoxPro DevCon上,他们没有称其为代码段重用。我创造了这个术语,以明确表示我指的是重用比整个应用程序小的代码块。FoxPro DevCon很久以前,我没有记得他们到底叫什么。)

我阅读了最新的“ Django的两个摘要”,它确实提到了在单个项目中重用代码段,但是我没有提到在多个项目中重用代码段的概念。

我在处理Django应用之前很久就编写并使用了getDateTimeObjFromString()。它位于我存放在/ home / Common / pyPacks下的软件包中。在我的计算机上,我设置了PYTHONPATH = / home / Common / pyPacks,因此每个项目都可以在那里访问代码。 getDateTimeObjFromString()的代码在名为Convert.py的文件中的Time子目录下。因此,要在任何项目中使用代码:

from Time.Convert import getDateTimeObjFromString

我的django应用程序从API下载数据,并且该数据包括时间戳。如果API发送python日期时间对象很好,但是得到的只是字符串。因此,getDateTimeObjFromString()的实用程序。

这只是一个例子,在/ home / Common / pyPacks下有很多小功能,我发现在django项目中可以方便地访问它们。

是的/ home / Common / pyPacks在github中受版本控制,是的,我通过git pull部署在任何特定的机器上。

从开发计算机处理django项目时,PYTHONPATH可以工作,并且我可以导入软件包。但是后来我尝试通过wsgi.py在服务器上运行django应用程序-禁用了PYTHONPATH。我可以在OS和Apache2级别上都设置PYTHONPATH,但是python会忽略它,功能无法导入。

我不想让我的个人通用库成为PyPI下的官方python包。

django社区是否希望我复制并粘贴?

我遇到了一个变通方法:通过将虚拟环境的site-packages目录中的“ pyPks”符号链接放置到/ home / Common / pyPacks中,使/ home / Common / pyPacks成为psudeo网站包,并在其中添加“ pyPks” INSTALLED_APPS,然后按如下所示更改所有导入语句:

original: 
    from Time.Convert import getDateTimeObjFromString
work around update:
    from pyPks.Time.Convert import getDateTimeObjFromString

我还必须更新我的所有通用库文件,以处理通过PYTHONPATH进行的绝对导入和相对导入。

How to fix “Attempted relative import in non-package” even with init.py

在Django项目中是否有更好的方法来重用代码片段?

0 个答案:

没有答案