在 Django 项目中声明附加数据和模块的最佳方式

Posted

技术标签:

【中文标题】在 Django 项目中声明附加数据和模块的最佳方式【英文标题】:Best way to declare additional data and modules in a Django project 【发布时间】:2021-12-19 22:10:51 【问题描述】:

问题 #1

我正在寻找最佳实践,以便在 Django 项目中声明附加数据。想象一下,我需要在app1/models.py 中存储要使用的大量选项(我已经看到很多最佳实践不断在模型主体中声明这些选项)。在另一种情况下,想象一下我需要保留数十个配置数据才能在我的views.py 中使用它们。在函数/类中声明它们是否常见?

在我看来,有两种常用的方法可以做到这一点。 (甚至完全不推荐)

方法#1

我实际上可以将它们全部保存在我的 settings.py 文件中并通过导入来访问它们(例如 from django.conf import settings)。

settings.py:

...

NBA_TEAMS = (
    ("red", "Bulls"),
    ("yellow", "Lakers"),
    ...
)

方法#2

将它们全部保存在一个名为 data.py 的文件中,就在 settings.py 旁边,并尝试在设置文件的末尾像这样导入它。

settings.py

...

try:
    from .data import NBA_TEAMS, ..
except:
    pass

问题 #2

在 Django 项目中创建模块有什么最佳实践吗?想象一下,我需要创建一个数据验证器函数来接收来自views.py 中的表单提交的字符串数据。我应该把这些函数/验证器/生成器放在哪里?

views.py

from --- import validateUsername

def submission(request):
    ...
    form = ContactForm(request.POST)
    if validateUsername(form.cleaned_data['username']):
        ...

是否有针对这些问题的最佳做法?谢谢。

【问题讨论】:

【参考方案1】:

根据我对这两个问题的建议,您应该创建一个 constants.py 和一个 utils.py 文件。

现在取决于您的用例,如果您想在项目中的多个应用程序中使用相同的常量,然后在 manage.py 旁边的根目录中定义它,或者如果常量特定于应用程序,则在特定的应用程序文件夹下创建它在views.py 文件旁边。

utils.py 也是如此,您应该在一个 utils.py 文件中定义所有实用程序函数/方法,并在项目中的所有应用程序中使用它。

【讨论】:

非常感谢。是否有任何官方参考宣布此解决方案?

以上是关于在 Django 项目中声明附加数据和模块的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

Django-Auth模块之auth_user表

Django - 如何在不修改的情况下扩展 3rd 方模型

Django在多个项目之间共享相同用户模型和数据库的最佳方式

带有 3rd 方数据库的 Django Channels 和 Web Socket

在 Django 项目中使用 Web Sockets 的最佳方法是啥?

在 Django 模型中存储项目的类别和子类别的最佳方法