Что такое функция ready () в функции UsersConfig ()? - PullRequest
1 голос
/ 16 марта 2019

У меня проблемы с пониманием этого кода

from django.apps import AppConfig


class UsersConfig(AppConfig):
    name = 'users'

    def ready(self):
        import users.signals

Некоторые сигналы импортируются в функции готовности, но что здесь делает функция ready(self)?и переменная name, указанная внутри, является встроенным ключевым словом?Я изучил документацию и ничего не понял.Пожалуйста, объясните, что означает этот

Подклассы могут переопределить этот метод для выполнения задач инициализации, таких как регистрация сигналов.Он вызывается, как только реестр полностью заполнен.

Хотя вы не можете импортировать модели на уровне модуля, где определены классы AppConfig, вы можете импортировать их в ready (), используя либо инструкцию importили get_model ().

и, пожалуйста, объясните это простыми словами.Спасибо

1 Ответ

0 голосов
/ 16 марта 2019

Приложения Django - это просто пакеты Python, которые взаимодействуют с фреймворком django. Но в какой-то момент django должен вести учет этих пакетов. Например, для создания миграций.

Чтобы вести учет приложений, django ведет реестр приложений для себя и ведет записи, используя экземпляры классов, унаследованных от AppConfig (того, который вы разместили в своем коде).

Функция готовности

Как указано в документации,

Он вызывается, как только реестр полностью заполнен.

Я объяснил выше, о каком реестре идет речь.

Некоторые сигналы импортируются в функции готовности, но то, что готово (самостоятельно) Функция здесь?

Поскольку функция ready вызывается, как только реестр готов,

def ready(self):
    import users.signals

означает, что файл users.signals файл будет импортирован одновременно, и определенно код внутри него будет выполнен и зарегистрирует наш сигнал.

Теперь имеет смысл, что мы можем использовать функцию ready для выполнения некоторого кода, который должен быть выполнен сразу после запуска приложения (например, регистрация сигналов).

Хотя вы не можете импортировать модели на уровне модуля, где AppConfig классы определены, вы можете импортировать их в ready (), используя либо оператор import или get_model ().

означает, что мы не можем импортировать модели из этого приложения в apps.py так, как мы их импортируем.

from users.models import SOME_MODEL

мы не можем этого сделать. Но если нам нужен доступ к некоторой модели в функции ready, класс AppConfig имеет функцию get_model для их получения.

Надеюсь, это очистит ваш разум.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...