Почему приложения Django требуют для всех `` manage.py` вместо `` __init__py`? - PullRequest
3 голосов
/ 20 апреля 2019

Я скопировал несколько manage.py строк на мой __init__.py, и все мои views и models можно импортировать из любого места без необходимости 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')

Это удобно при импорте данных или переносе данных изиз каталога проекта fixtures.

Что-то не так с этим?Если нет, то почему Django не делает это по умолчанию, когда вы python manage.py startproject?

1 Ответ

1 голос
/ 20 апреля 2019
  1. Что-то не так с этим? В этом нет ничего плохого! Различные команды разработчиков имеют разные предпочтения. Хотя django общеизвестен (например, все таблицы должны иметь одно поле первичного ключа с автоинкрементом, называемое id), то, как вы хотите загружать приложения, зависит от вас.
  2. Почему бы не сделать это по умолчанию? Я могу придумать пару причин. Во-первых, у нескольких людей есть свои собственные приложения, которые можно использовать повторно, или есть даже PyJ-приложения django, которые вы можете установить. Если бы каждый из них с именем django.setup django был бы настроен один раз для каждого приложения. Это также не учитывает несколько потоков, запущенных на веб-сервере, и настройки приложения. , что может привести к конфликту ресурсов, когда вы не обязательно их хотите. Наконец, вы также потеряете некоторый контроль над настройкой приложения и порядком инициализации в тех случаях, когда вам это нужно, поскольку порядок импорта теперь алфавитный, а не через INSTALLED_APPS. Необходимость писать команды управления и использовать их через manage.py кажется небольшой ценой, чтобы хорошо играть с другими приложениями.
...