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包并将其导入我需要这些函数的视图中?
答案 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应用程序中轻松导入任何需要的地方。