gpt4 book ai didi

python - 为什么 Django 应用程序需要 `manage.py` 而不是使用 `__init__py` ?

转载 作者:行者123 更新时间:2023-11-28 18:00:57 24 4
gpt4 key购买 nike

我将一些 manage.py 行复制到我的 __init__.py 并且我所有的 viewsmodels 都可以无需 python manage.py shell 即可从任何地方导入:

import os
import django

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()

这样我就可以在 __init__.py 中导入我的子模块(进一步向下):

import glob

modules = glob.glob(os.path.join(os.path.dirname(__file__), '*.py'))
__all__ = [os.path.basename(f)[:-3] for f in modules
if os.path.isfile(f) and not f.endswith('__init__.py')]
from . import *

这样我就可以从任何目录执行此操作:

import myproject as mp
mp.models.MyModel.objects.get(field_name='value')

这在从项目固定目录导入数据或进行数据迁移时非常方便。

这有什么问题吗?如果不是,为什么 Django 在 python manage.py startproject 时默认不这样做?

最佳答案

  1. 有什么问题吗?没有错!不同的开发团队有不同的偏好。虽然众所周知 django 固执己见(例如,所有表都应该有一个名为 id 的自动递增主键字段),但您希望如何加载应用程序取决于您。
  2. 为什么不默认执行此操作?我能想到几个原因。首先,很多人都有自己的可重用应用程序,或者甚至有 pypi 可用的 django 应用程序可供您安装。如果它们中的每一个都称为 django.setup django 将为每个应用程序设置一次。这也不考虑在网络服务器中运行的多个线程,并且 application setup.当您不一定需要时,这可能会导致资源争用。最后,在需要的情况下,您还会失去对应用程序设置和初始化顺序的一些控制,因为导入顺序现在是按字母顺序排列的,而不是通过 INSTALLED_APPS。必须编写管理命令并通过 manage.py 使用它们似乎是与其他应用程序良好配合所要付出的小代价。

关于python - 为什么 Django 应用程序需要 `manage.py` 而不是使用 `__init__py` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55768661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com