Питание USB всегда включается? И в противном случае как записать драйвер

Проблема

Использование пользовательского класса, полученного из django.contrib.admin.AdminSite для сайта администратора проекта, без необходимости написания пользовательского регистрационного кода для регистрации моделей в новом классе. Когда я использую сторонние приложения с их собственными моделями, я бы не стал редактировать пользовательский регистрационный код только потому, что модели были добавлены или удалены из этих приложений.

Решение

Вы должны переключить экземпляр, созданный с помощью класса по умолчанию, используемого для сайта администратора, на свой собственный экземпляр, созданный с вашим собственным классом до django.contrib.admin 'autodiscover функция вызывается. Я делаю это:

  1. Наличие приложения, которое будет выполнять переключение. (Я использую свое приложение для конкретного проекта под названием core для своих собственных целей.)

  2. Два варианта:

    1. Django 1.6 до 1.9: Используйте __init__ приложения для выполнения переключения. В Django 1.8 вы получите предупреждение об устаревании из-за изменений в Django 1.9, указанных ниже. Обратите внимание, что этот метод будет работать также с 1.9, потому что модули Django, загруженные с помощью кода, показанного ниже, были изменены в 1.9, чтобы они больше не загружали модели. Когда я использую этот метод, мой core/__init__.py файл содержит:

      from django.contrib import admin
      from django.contrib.admin import sites
      
      class MyAdminSite(admin.AdminSite):
          pass
      
      mysite = MyAdminSite()
      admin.site = mysite
      sites.site = mysite
      
    2. Django 1.9 и более: использует конфигурацию приложения приложения для выполнения переключения. Начиная с Django 1.9, в примечаниях к выпуску говорится :

      Все модели должны быть определены внутри установленного приложения или объявлены явные метки app_label. Кроме того, невозможно импортировать их до загрузки их приложения. В частности, невозможно импортировать модели внутри корневого пакета приложения.

      Я предпочитаю ограничивать импорт, который я делаю на корневом уровне, чтобы избежать риска загрузки моделей. В то время как в версии 1.9 с использованием метода __init__, описанного выше, будет работать , невозможно сказать, будет ли 1.10 или более поздняя версия вносить изменения, которые вызовут проблемы.

      Когда я использую этот метод, core/__init__.py устанавливает default_app_config = "core.apps.DefaultAppConfig", и у меня есть core/apps.py, подобный этому:

      from django.apps import AppConfig
      
      class DefaultAppConfig(AppConfig):
          name = 'core'
      
          def ready(self):
              from django.contrib import admin
              from django.contrib.admin import sites
      
              class MyAdminSite(admin.AdminSite):
                  pass
      
              mysite = MyAdminSite()
              admin.site = mysite
              sites.site = mysite
      

      Хотя этот метод можно использовать с версиями 1.7 и 1.8, он немного рискованно использовать его с этими версиями. См. Примечания ниже.

  3. Размещение этого приложения раньше, чем , чем django.contrib.admin, в списке INSTALLED_APPS. (Это абсолютно необходимо для 1.7 и более поздних версий. В более ранних версиях Django он мог бы работать нормально, даже если приложение более позднее, чем django.contrib.admin. Однако см. Примечания ниже.)

Примечания и предостережения

  • Приложение, которое выполняет переключение, должно действительно быть первым приложением в списке INSTALLED_APPS, чтобы минимизировать вероятность того, что что-то еще получит значение site из django.contrib.admin до того, как будет выполнено переключение. Если другому приложению удастся получить это значение до того, как будет выполнено переключение, то у этого другого приложения будет ссылка на старый сайт. Веселье наверняка наступит.

  • Приведенный выше метод не будет работать хорошо, если два приложения пытаются установить свой собственный новый класс сайта администратора по умолчанию. Это должно быть обработано на индивидуальной основе.

  • Вполне возможно, что будущий релиз Django может сломать этот метод.

  • Для версии до 1.9 я предпочел использовать __init__ для переключения сайтов с использованием конфигурации приложения, поскольку документация об инициализации указывает, что метод ready() конфигураций приложения называется относительно поздно. Между моментом загрузки модуля приложения и вызовом ready() моделей загружаются, и в некоторых случаях это может означать, что модуль получил значение site из django.contrib.admin до того, как ready называется. Чтобы минимизировать риск, у меня есть код приложения __init__ для переключения.

    Я полагаю, что риск, существовавший в версиях 1.7 и 1.8 и которого я избежал, используя __init__ для выполнения переключения сайта как можно раньше, не существует в 1.9. Всем запрещается загружать модули до загрузки всех приложений. Таким образом, переключение в обратном вызове ready первого приложения, указанного в INSTALLED_APPS, должно быть безопасным. Я обновил большой проект до 1.9 и без проблем использовал метод конфигурации приложения.

5
задан MSalters 11 June 2009 в 13:02
поделиться

5 ответов

Почему питание устройства не поступает без драйвера?

USB-порты всегда запитаны, когда компьютер включен, а управляющее программное обеспечение USB не обнаружило превышения допустимого тока.

Всегда ли требуется драйвер, чтобы порт USB начал подавать питание?

Нет, порт USB всегда требуется для подачи питания на устройство, иначе устройство никогда не сможет инициировать соединение.

Или это так. это устройство, специально созданное так, чтобы не брать заряд, если его не запускает какая-то программная процедура?

Это может быть сложно. Чтобы соответствовать спецификации USB, устройство не может потреблять более нескольких мА, пока оно не будет зарегистрировано в компьютере.

Однако почти каждый компьютер позволяет USB-порту потреблять полные 500 мА (и более), прежде чем оно отключит питание .

Устройство, которое вы перезарядка приятна тем, что не потребляет значительную мощность, пока компьютер не даст разрешения.

Написание программного обеспечения не поможет, устройство должно зарегистрироваться на шине USB, что лучше всего будет сделано с помощью драйвера.

Однако , зарядное устройство этого не делает. Вероятно, он закоротил две линии передачи данных USB-штекера вместе, что сигнализирует USB-устройству о том, что оно не подключено к компьютеру и может потреблять 500 мА без ожидания.

Возьмите удлинительный кабель USB, отрежьте куртку и закоротите вместе линии данных (зеленую и желтую, иногда) на конце, идущем к USB-устройству, и оставьте их обрезанными, не касаясь чего-либо на конце, идущем к ПК, и оставьте провод чтения и черный провод питания подключенными.

Это может сработать. Если нет, разберите зарядное устройство и выясните, что это?

16
ответ дан 18 December 2019 в 06:51
поделиться

Похоже, это зависит от платформы. В Linux порты USB всегда включены, а в Windows - нет. Накопители со светодиодами отключаются при демонтаже в Windows, но в Linux они продолжают гореть. В руководстве к моему мобильному телефону написано, что он не может быть заряжен от компьютера, но я регулярно это делаю на своей Linux-машине, я думаю, это потому, что у них нет драйвера, а окна не включаются без него.

3
ответ дан 18 December 2019 в 06:51
поделиться

Вы пробовали подключить его к «тупому» USB-порту - как тот, что на автомобильное зарядное устройство? Эти порты являются чистой мощностью и не создают сеть USB. Я думаю.

1
ответ дан 18 December 2019 в 06:51
поделиться

Если у вас нет технических характеристик оборудования от производителя, я думаю, вам не повезло. Вы можете попробовать обратное проектирование драйвера, чтобы увидеть, что он делает, но я ожидаю, что будет дешевле и проще просто купить драйвер с кроссплатформенными драйверами или зарядить без драйвера.

0
ответ дан 18 December 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: