#python #django
#python #django
Вопрос:
У меня проблемы с пониманием этого кода
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
def ready(self):
import users.signals
Некоторые сигналы импортируются в функцию ready, но что ready(self)
функция здесь делает? а name
переменная, указанная внутри, является встроенным ключевым словом? Я изучил документацию, я ничего не понял. Пожалуйста, объясните, в чем смысл этого
Подклассы могут переопределять этот метод для выполнения задач инициализации, таких как регистрация сигналов. Она вызывается, как только реестр полностью заполнен.
Хотя вы не можете импортировать модели на уровне модуля, где определены классы AppConfig, вы можете импортировать их в ready(), используя либо инструкцию import, либо get_model() .
и, пожалуйста, объясните это простыми словами. Спасибо
Ответ №1:
Приложения Django — это просто пакеты python, которые взаимодействуют с платформой django. Но в какой-то момент django необходимо сохранить запись этих пакетов. Например, для создания миграций.
Чтобы вести учет приложений, django поддерживает реестр приложений внутри и ведет запись с использованием экземпляров классов, унаследованных от AppConfig
(того, который вы разместили в своем коде).
Готовая функция
Как указано в документации,
Она вызывается, как только реестр полностью заполнен.
Я объяснил выше, о каком реестре они говорят.
Некоторые сигналы импортируются в функцию ready, но что здесь делает функция ready (self)?
Потому что функция 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
функция для их получения.
Я надеюсь, это прояснит ваш разум.
Комментарии:
1. @basirpayenda Мы всегда рады вам и, пожалуйста, удалите приведенный выше комментарий, содержащий ваш контактный номер. Вам следует избегать обмена вашей личной информацией на общедоступных форумах. Я пропингую вас на quora. Регады,