实用函数应该在Django中居住在哪里?

实用函数应该在Django中居住在哪里? 像自定义encryption/解密数字,发送推文,发送电子邮件,validation对象所有权,自定义inputvalidation等function。重复和自定义的东西,我在我的应用程序的许多地方使用。 我现在肯定打破了干。

我看到一些演示在models.py中定义了函数,尽pipe这在我看来并不符合概念。 他们应该进入一个“实用程序”的应用程序,导入到我的项目? 如果是这样,他们在公用事业应用程序中去哪里? 那里的models.py文件?

感谢您帮助这个n00b了。

更新:让我更具体。 假设我需要一个带参数“number”的函数“light_encrypt(number)”,将其乘以7,加上10并返回结果,另一个函数“light_decrypt(encr_number)”将参数“encr_number”减去10,除以7,并返回结果在我的Django树中,我会把这个吗?这不是中间件,对吗?如Felixbuild议,我创build一个python包并将其导入视图中,我需要这些function?

不同的问题但相同的答案:

我通常的Django站点的布局是:

projects/ templates/ common/ local/ 

哪里:

  • 项目包含您的主要项目和其他任何项目
  • common包含你可能在不同站点上共享的东西,或者至less不是特定于项目的,比如你需要下载django-profile和django-registration而不是直接在python / site-packages
  • 模板包含这一点
  • 本地包含将要特定于当前机器的东西,以便您可以正确分离数据,如数据库位置和密码 – 然后将机器特定版本(例如“machine1-localconfig.py”)软链接到local / localconfig.py然后可以在settings.py中“导入localconfig”
  • 我通常把特定于项目的中间件放在一个项目中,而中间件不是特定于通用/中间件/
  • 确保将模板目录添加到设置中的正确位置(或者最有可能的,localconfig.py,然后将其导入到设置中),并确保将项目,常用和本地目录添加到您的PYTHONPATH中。

好了,在阅读完评论和回答之后,我决定在我的项目目录下创build一个名为“common / util /”的目录。 在那里我有一个文件“__init__.py”,我有我的小帮手function。

我猜如果这个文件变得太大,我会把这些函数分割成单独的.py文件。 所以现在,我的项目结构看起来像这样。 如果我做出了不好的select,请纠正,我已经发展到了足够早,我现在可以解决这个问题,而且还是很容易的。

 myproject/ (Django project) common/ util/ __init__.py (helper functions) middleware/ (custom middleware) templates/ (project templates) myapp/ fixtures/ (initial data to load) migrations/ (south migrations) urls/ views/ admin.py forms.py models.py test.py public/ (static stuff not served by Django) media/ css/ img/ js/ lib/ 

这是另一种方式来做到这一点:

如果实用函数可以是一个独立的模块,并且您正在为您的django应用程序使用virtualenv环境,那么您可以将这些function作为一个包绑定并安装在virtualenv中。

这使得您可以轻松导入django应用程序所需的任何位置。