实用功能应该放在哪里Django?

时间:2010-07-20 23:45:14

标签: python django structure

Django中的实用功能应该放在哪里?功能包括自定义加密/解密数字,发送推文,发送电子邮件,验证对象所有权,自定义输入验证等。我在我的应用程序中的许多地方使用的重复和自定义的东西。我现在肯定打破DRY。

我看到了一些在models.py中定义函数的演示,虽然这在概念上对我来说似乎并不合适。他们应该进入导入我项目的“实用程序”应用程序吗?如果是这样,他们在实用程序应用程序中的位置?那里有models.py文件?

感谢您帮助解决这个问题。

更新:让我更具体一点。假设我需要一个函数“light_encrypt(number)”,它取param“number”,乘以7,加10并返回结果,另一个函数“light_decrypt(encr_number)取param”encr_number“,减去10,除以7并返回结果。在我的Django树中我会把它放在哪里?这不是中间件,对吧?正如Felix建议的那样,我是否创建了一个python包并将其导入我需要这些函数的视图中?

3 个答案:

答案 0 :(得分:21)

不同question但答案相同:

  

我常用的django网站布局是:

projects/
templates/
common/
local/
     

其中:

     
      
  • 项目包含您的主项目和其他任何
  •   
  • common包含您可以跨站点共享的内容,或者至少不是项目特定的内容,例如,如果您需要下载django-profile和django-registration而不是直接在python / site-packages中
  •   
  • 模板仅包含
  •   
  • local包含特定于当前计算机的内容,以便您可以正确分离数据,例如数据库位置和密码 - 然后我将软件链接到特定于机器的版本(例如“machine1-localconfig.py” “)到local / localconfig.py,然后可以在settings.py
  • 中”导入localconfig“   
  • 我通常把项目特定于项目的中间件放在项目中,而中间件不是特定于项目的/中间件/
  •   
  • 确保将templates目录添加到设置中的正确位置(或者很可能是localconfig.py,然后在设置中导入它),并确保将项目,公共和本地目录添加到PYTHONPATH。 / LI>   

答案 1 :(得分:14)

好的,在阅读完评论并在这里回答后,我决定在我的项目目录中创建一个名为“common / util /”的目录。在其中我有一个文件“__ init__.py”,我有我的小助手功能。

我想如果文件太大,我会将这些函数拆分成单独的.py文件。所以现在,我的项目结构看起来像这样。如果我做出任何糟糕的选择,请更正,我在开发中已经足够早,我现在可以修复它,但仍然很容易做到这一点!

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/

答案 2 :(得分:1)

这是另一种方法:

如果实用程序功能可以是独立模块 并且您正在为django应用程序使用virtualenv环境 然后,您可以将功能捆绑为一个包并将其安装在virtualenv中。

这使您可以在django应用程序中轻松导入任何需要的地方。