А класс на полевиках: АБ3 – усилитель класса А на полевых транзисторах

Содержание

УМЗЧ А КЛАССА НА ПОЛЕВЫХ ТРАНЗИСТОРАХ

Привет всем любителям хорошего аудио. Изучив несколько статей про разработку итальянского инженера-аудиотехника Андреа Чуффоли про усилитель Power Follower 99c, подумалось собрать тоже такую вещь. Были подобраны необходимые детали, прочитаны несколько статей и в путь… Первый канал оконечного усилителя на IRFP150N собран за пару часов неспешно, с перекурами и перерывами на общение с друзьями и парочку онлайн-игр. Тем более что схема совсем не сложная.

Схема принципиальная УМЗЧ Power Follower 99c

Сразу хочу предостеречь — включать это чудо без мало-мальских приличных радиаторов — это 100% убийство полевых транзисторов! Греется схема как небольшой масляный обогреватель. Всё-ттаки чистый А-класс.

Все три транзистора IRFP150N в каждом канале закрепил на один радиатор (один радиатор — один канал). Для этой цели использовал недавно удачно приобретенного донора «Кумир-001». Радиаторы меньших размеров, думается мне, не будут достаточно охлаждать схему.

   

Включил: вроде ничего не взорвалось, выставил половину напряжения на предохранителе. Подключил нагрузку (колонки S30), сигнал на вход подал со звуковой карты компьютера… И расстроился: звук хороший, активный, насыщенный, но максимум 4 Ватта на слух.

Как это часто бывает сыграла невнимательность. Огромное спасибо другу Сергею, который изучив оригинальную статью на английском языке подсказал, что схема этого оконечного усилителя не что иное, как, цитирую «усилитель тока, и коэффициент усиления по напряжению у него равен 1. Именно поэтому к нему делают специальные ламповые предусилители или на транзисторах с высоким питающим напряжением», конец цитаты.

Блок питания и преамп

Следовательно, нужен хороший предварительный усилитель — ламповый, транзисторный, любой. Выбрал вот такой вариант:

Ибо уж если полевики, то полевики до конца.

На входе диодного моста — 60 Вольт (трансформатор ТПП-235-220-50), на выходе БП — 58,8 Вольт, в обоих плечах.

Резисторы R1 — 1К5; R2, R3 — 47 Ом. Все резисторы — 2 Ватта мощностью. Транзистор в БП — TIP29A. Стабилитроны Zener на 10 Вольт, 5 Ватт.

По поводу усилителя мощности, вот комментарии по результатам первых испытаний:

  1. Каждый канал собирается согласно первой схемы, и каждый канал должен питаться от отдельной вторичной обмотки трансформатора со своим диодным мостом и конденсатором.
  2. Радиатор и еще раз радиатор!
  3. Подстроечник 500 Ом за неимением заменил на многооборотный 1 кОм, следовательно 1.8 кОм резистор поменял на 1.2 кОм.
  4. Переключатель режимов (1.5А/3А) делать не стал, поскольку необходимость этого очень сомнительна, следовательно второй резистор 0,47 не нужен. Вместо трехватного 0,47 использовал три 2-омных двухватника параллельно (МЛТ-2, например).
  5. Питается от трансформатора из фирменного сабвуфера с двумя вторичными обмотками по 24 Вольта и одной 14 Вольт (это будет питание схемы индикации).
  6. Напряжение на истоке транзистора в блоке питания канала (правый верхний по схеме) — 22. 5 Вольта.
  7. Напряжение на предохранителе (относительно минуса питания) — 10.9 Вольт. Сколько не крутил подстроечные резистор, большего добиться не удалось.

Первый канал предварительного усилителя собран, протестирован, хотя и не без накладок. Вместо 22 Ом (R102) резистора сперва поставил на плюс питания 22 кОм и огорчился, когда конструкция начала издавать в колонке хрипы и стоны. Благо перепутал не наоборот, и вместо килоомов не впаял омы — могло бы кончиться плачевно и с дымком. Поменял резистор — выставил напряжения (по сути, достаточно выставить 20 Вольт на стоке полевика, остальные напряжения с небольшим допуском получились сами) подстроечным резистором. И вуаля — чистый, мягкий и в то же время насыщенный звук с виниловой пластинки играет в 8-омную колонку очень красиво!

В общем вот, стерео вариант фоловера + предусилитель + блок питания к преампу готовы, проверены, протестированы.

По результатам могу сказать:

  • Для каждого канала УМЗЧ отдельная вторичка нужна и отдельный блок питания.
  • Греется этот усилитель по взрослому, посему радиаторы и еще раз радиаторы.
  • По звуку: чистый он, что-ли реальный какой-то, в общем приятный на слух.

На этом, пожалуй, все. Огромная благодарность моим друзьям Сергею и Игорю за идейное вдохновение, теоретическую и практическую помощь. Схему собрал и испытал — neo_work_tyumen.

   Форум по УНЧ

   Обсудить статью УМЗЧ А КЛАССА НА ПОЛЕВЫХ ТРАНЗИСТОРАХ

класс А, IRF610 с источником тока на LM317 » Журнал практической электроники Датагор (Datagor Practical Electronics Magazine)


От neyalm:
Продолжение темы о простых однотактных усилителях на одном полевике. И это тоже повторитель. Кус по напряжению примерно 0,8. КПД около 25%, однако, печка совсем небольшая.

Эту конструкцию собирал сам, навесным монтажом. Запела сразу. Планирую встроить этот усилитель в свою CD-деку, а то в ней родной хэдамп слабоват.


Содержание / Contents

Если у тебя наушники Grado SR80, встроенная звуковая карточка уже не может их достойно раскачать, поэтому я решил сделать настольный ушной усилитель для офиса. Как и в других проектах, я старался создать максимально простую, не содержащую дефицитных деталей и хорошо повторяемую конструкцию.
Получилась схема простого самодельного хедампа в стиле «Усилитель для наушников на MOSFETе класса А» от Greg Szekeres и чем-то похожая на «Однотактный усилитель Хьюстона класса А на 2SK1058 MOSFET-е». Основная изюминка усилителя заключается в применении активного источника постоянного тока вместо пассивного резистора. Это удваивает производительность схемы, КПД приближается к теоретическому максимуму 25%.

Рисунок 1: Упрощенная схема усилителя.

Необходимо учитывать две особенности. Во-первых, повторитель на полевике позволяет получать приличные токи, но Кус по напряжению меньше 1. Усилитель применяется в случаях, когда источник сигнала имеет достаточное напряжение на выходе (например, mp3 плеер или компьютер). Во-вторых, схема чувствительна к питанию, любой шум БП беспрепятственно попадет к вам в уши. Вполне подойдет маломощный блок питания: 10-20В , 750мА постоянки должно хватить.
Схема приведена на рисунке 2. Я использовал IRF610, но его можно заменить и другим полевиком, выбор очень велик. Источник тока 250мА построен на LM317.


Рисунок 2. Схема усилителя.

Этот усилитель будет использоваться в офисе, а значит, и дизайн корпуса должен быть соответствующий. К счастью, у меня нашелся трупик внешнего CD-ROMa Plextor, поразмыслив, я понял, что из него получится прекрасный корпус, гармонирующий с моим рабочим местом. Корпус уже оснащен выключателем питания, внутри легко поместится БП, снаружи – входные гнезда RCA и выходное — под мини джек. Чудненько! Лишнее отверстие на задней стенке предназначалось для USB гнезда, его я уже выковырял для другого проекта.


Фотография 1: Корпус внешнего CD-ROMa Plextor.

Я использовал макетные платы площадью примерно 10см кв., но запоет и с любой другой платой. Детали использовались те, что были под рукой, ни одной не пришлось покупать. Резисторы — обычные, металло – пленочные(правда, подобранные), входной конденсатор пленочный, 1 мкФ, выход шунтирует полипропиленовый 0,47мкФ. Конденсатор в питании, 0,1мкФ, также пленочный. Можете применять более крутые разделительные конденсаторы, думаю, это положительно скажется на звуке. Не рекомендую использовать угольные резисторы, особенно в источнике тока, их сопротивление сильно плывет при нагревании.


Фотография 2: Усилитель в сборе.

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

Исключён фрагмент. Полный вариант статьи доступен меценатам и полноправным членам сообщества. Читай условия доступа.

Фотография 3: Усилитель в корпусе.

Первые испытания усилителя производились с регулируемым БП, при низких напряжениях. Ток выставляется 100 килоомным переменником, на выходе полевика(исток) нужно получить половину питающего напряжения(сток). Нужно подправлять ток несколько раз за первые несколько часов работы, пока все не устаканится.

Усь работает при питании 10-20В, но, похоже, для уверенной работы требует от 13В. С регулируемым БП шумов в слышимом диапазоне не наблюдалось. Этого нельзя утверждать для случая нестабилизированного питания.


Фотография 4: Испытания в разгаре.

Вскоре у меня появился новый USB осциллограф, отличная возможность и его испытать. Модель DSO-2150, двуканальный, полоса 60МГц, максимальная частота выборки 150 млн. раз/с . Когда я прогонял синусоиду, результаты, как и ожидалось, были хороши на всем звуковом диапазоне. Привожу два скриншота испытаний прямоугольником: 100Гц и 4800 Гц.


Фотография 5: 100Гц, прямоугольник.


Фотография 6: 4800Гц, прямоугольник.

Верхняя половина (зеленый) показывает входной сигнал, а нижняя (желтый) – выходной. Мой генератор не безупречен, это видно на картинке входного сигнала. Посмотрите на амплитуду сигнала на входе и на выходе – становится понятным, что Кус=0,8. Как вы можете заметить, на первой фотографии (100Гц) наблюдаем спад.

Этот спад уменьшается с повышением частоты ,и с 300Гц до 20кГц картина идеальная. Поскольку музыка складывается в основном из гармонических колебаний, а синусоиду усилитель практически не искажает, нет повода для беспокойств.
Последние штрихи: приклеиваю переднюю панель к алюминиевой пластине эпоксидкой, ставлю обратно в корпус. Громкость будет регулироваться источником, поэтому внешнего регулятора нет. Родной регулятор громкости CD-ROMa был удален, отверстие заклеено.

Фотография 7: Лицевая панель CD-ROMa.


Фотография 8: Полностью собранный усилитель.


Для такого простого асинхронного усилителя, звук великолепный, на мой слух. Усилок раскачивает мои Grado SR80 с такой легкостью, на которую mp3 плеер просто не способен. Звук у этого усилителя нравится мне даже больше, чем у встроенного в предусилитель NAD C162 хедампа.

 

Новые режимы работы (классы) А+, Super A, New class A, MOS, class AA

В описаниях некоторых усилителей встречаются рек­ламные указания на новые классы работы, например А+, Super A, New class A, MOS class AA и т. д. Обычно, стремясь не слишком-то разглашать свои научно-технические до­стижения, фирмы не сообщают того, что же конкретно представляют собой эти новые режимы работы (классы). Тем не менее, попробуем разобраться в этом хотя бы частично.

Класс А всем хорош, за исключением его крайне низкой экономичности. Один из путей ее повышения — применение регулируемых напряжений источников пита­ния. Если усиливаемый сигнал мал, то можно (сохранив класс А) понизить напряжение питания. В некоторых усилителях (например, фирмы Technics) для этого используется источник питания со средней точкой, подключен­ной к выходу вспомогательного усилителя, работающего в классе В. Тем самым напряжения питания основного усилителя, работающего в классе А, становятся плава­ющими и отслеживают уровень входного сигнала. При этом, сохраняя линейность, присущую классу А, удается получить КПД, как в классе В. Это и есть так называемый класс А+ или Super А.

New Class A и Super A — это коммерческое название усилителей, в которых неработающий транзистор в двухтактном усилителе не входит в режим отсечки. Этим решалась проблемма т.н. коммутационных искажений .

 Класс AA — не режим работы каскада усилителя, как A,B,AB,C и D — а название определенной конфигурации схемы усилителя.  Такой усилитель представляет из себя два усилителя — относительно маломощный с выходом на полевиках, работающий в классе A, и обычный мощный на биполярных транзисторах, работающий в классе AB, работающие на общую нагрузку. Включены они наподобие моста. Таким образом, они получают преимущества классов A AB.

Наличие в названии класса термина MOS просто означает, что в каскаде используются мощные полевые транзисторы со структурой «металл—окисел—полупровод­ник». Но не обязательно только они. Некоторые фирмы используют каскады, в которых наряду с каскадом на мощных полевых транзисторах, действительно работа­ющих в классе А, используется дополнительный каскад на еще более мощных биполярных транзисторах. Он включа­ется с некоторым запозданием (поскольку биполярные транзисторы менее быстродействующие, чем полевые) и разгружает полевые транзисторы. Для совместной работы каскадов применяется специальная мостовая схема, обес­печивающая объединение мощностей каскадов и создание небольшого напряжения возбуждения для каскада на би­полярных транзисторах. Описанная схема предложена фирмой Technics и при­меняется в ряде ее усилителей. Она дает характеристики, присущие каскадам на мощных МДП(М08) транзисто­pax, используемых в классе А, но с более высокой мощно­стью и экономичностью, близкой к классу В.

Иногда используется ключевой режим работы транзи­сторов — класс D. В нем для управления током в нагрузке используется ключевой каскад с широтно-импульсной модуляцией. Теоретически КПД такого каскада прибли­жается к 100%. Однако искажения сигнала в этом случае велики, а в спектре присутствуют гармоники частоты модуляции. Практического применения в высококаче­ственных усилителях этот режим почти не нашел — так же, как и класс С, используемый в резонансных каскадах радиопередающих устройств.

 

Классы усилителей. Устройство и принципы работы | Усилители для колонок | Блог

Усилители принято делить на классы в зависимости от режима работы активных элементов. будь то лампы или транзисторы. Считается, что от класса усилителя зависит качество звука, и в большинстве случаев покупатели ориентрируются больше на этот показатель чем на реальные технические характеристики. Эта заметка немного прольет света на значимость класса при выборе усилителя.

Усилители класса А

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

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

Усилители класса B

Рабочая точка последнего каскада выбирается в основании вольтамперной характеристики транзистора, что позволяет снизить нагрев устройства. Недостатком является ступенька, в области тихих сигналов, из-за чего применялся в низкокачественных портативных устройствах и был полностью вытеснен классом D. 

Усилители класса AB

Точка покоя выбирается чуть дальше от нуля, это позволяет достичь некоторого баланса между качеством звука и нагревом. Прочие классы (G или H) так или иначе развивают эту идею. Из-за относительно простой схемотехники, не особо требовательной к качеству компонентов, встречается повсеместно — от недорогих портативных устройств, до концертных усилителей и аудиофильских штучек.

Любимый трюк производителей — завысить точку смещения, чтобы для замера искажений на паспорт усилитель работал в режиме A, а замер мощности, произвести уже в режиме AB. Как результат — красивые цифры и плохой звук.

Усилители класса С, H, G

Рабочая точка в усилителях класса C, по сравнению с классом B, еще больше смещена относительно центра линейного участка ВАХ-транзистора. В звуковых устройствах из-за слишком больших искажений не используются.

В усилителях H-G классов, по сути, представляющих из себя класс AB, используется дополнительный источник напряжения, подключаемый прямо на лету к выходному каскаду. Это позволяет немного повысить КПД.

Усилители класса D

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

Так как тепло в основном выделяется при переключении из одного состояния в другое, транзистор очень мало нагревается. Более высоким КПД обладают только режимы E и F, где переключение транзистора происходит в тот момент, когда через него не проходит ток (за счет работы в резонансе с нагрузкой). Но для звуковых усилителей такой режим не подходит из-за слишком больших искажений. Дурную славу эти усилители получили по самым первым дешевым представителям класса.

На самом деле качество усилителя класса D зависит от типа и частоты модуляции. А уже от этого зависит сложность схемотехники, необходимое качество компонентов и, соответственно, цена. Мощные транзисторы, способные работать на большой частоте в ключевом режиме, как и высококачественные аналогово-цифровые преобразователи (ADC) могут стоить весьма внушительно.

Простейшие представители класса D основаны на усилении широтно-импульсной модуляции с частотой ниже 50 кГц. По сути они являются аналоговыми устройствами. 

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

Именно такие усилители и стали причиной мифов о плохом качестве звука всего класса. Первые усилители класса А, работающие на лампах с плохим вакуумом и с железным трансформатором тоже не особо блистали характеристиками, но об этом предпочитают не вспоминать. 

Да, такой усилитель годится только для сабвуферов, но даже в этом применении его главным достоинством является низкий уровень нелинейных искажений.

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

Для усилителей класса D низкий уровень искажений сохраняется практически во всем рабочем диапазоне громкости. Для сабвуфера эта разница не столько в качестве звука, сколько в меньшем нагреве катушки.

В моделях, произведенных с упором на качество, используется дельта-сигма-модуляция. Благодаря обратной связи схема делает поправки на ошибки квантования, что в сумме с  нойз-шейпингом или дитерингом выводит шумы в область ультразвука. Работу этих алгоритмов для звука можно наглядно продемонстрировать на изображении:

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

Маломощные усилители D-класса получили распространение в мобильной и портативной технике, Bluetooth-колонках. Зачастую представляют из себя одну микросхему, которой даже не требуются дополнительные фильтры на цепях питания — обратная связь компенсирует не только искажения в самой схеме, но и пульсации питания. А за счет с высокой частоты модуляции, индуктивности катушки динамика хватает для фильтрации паразитных высоких частот.

Даже мощным усилителям класса D не надо время на прогрев для достижения паспортных характеристик (для класса А может достигать получаса). Именно благодаря этому профессионалы так полюбили усилители класса D. Такая аппаратура не создает фонового шума, мало греется и готова работать сразу же.

Но и это не все. больше всего этот тип усилителей проявляет себя в работе с цифровым сигналом. Конверторы формата PCM в DSD, встроенные в усилитель, позволяют избегать лишних преобразований из аналога в цифру и обратно. Звук проходит через усилитель в цифровом виде до самого последнего транзистора, которые в Hi-end устройствах могут работать на частотах порядка десятков мегагерц.

Современные устройства пошли еще дальше. В цепь цифрового сигнала добавляют цифровой сигнальный процессор (DSP) для компенсации фазово-частотных искажений, вносимых как динамиком, так и помещением. Искажения замеряются микрофоном, а DSP искажения компенсирует. В итоге такая связка цифрового усилителя и цифровой обработки позволяет добиться максимального качества звука, на которое способен динамик. Именно это и делает усилители класса D любимчиками профессионалов, обращающих внимание в первую очередь на результат.

А для аудиофилов класс D производители тщательно маскируют под названиями других классов, например, Z. Или используют их в качестве источников напряжения для усилителей класса A, AB, хотя при взгляде под другим углом такая схема выглядит как активный фильтр искажений для класса D. А то и вовсе умалчивают о принципах работы усилителя. Как это делает Yamaha:

Но даже беглым взглядом можно сразу заметить характерный для класса D фильтр паразитных частот — катушки индуктивности возле мощных транзисторов редкий гость в усилителях других классов.

Заключение

Любой усилитель, независимо от класса, может быть плохим или хорошим. Конкретное схемотехническое решение влияет на звук больше, чем класс усиления.

Отличительная и неизменная черта классов усилителей — это КПД. И самый большой КПД, порядка 90%, в классе D.

Простой генератор пилообразного сигнала на 555 таймере

[Read in English] 

Не стану утверждать, что «пила» просто необходима для отладки аудио-усилителей. Удобно, конечно, посмотреть, не скривилось ли что напрочь — с пилою видны на глаз, и часто нагляднее, чем с синусоидой, всяческие ограничения сигнала или какие-нибудь переходные искажения.

Данный проект я собрал «до кучи» к генератору синусоиды на мосте Вина. Использую его регулярно для отслеживания характера ограничений по амплитуде в своих конструкциях. Так же пила оказалась незаменимой в выявлении всевозможных подсвистов усилителей, которые не видны ни на синусе любой частоты, ни на прямоугольнике…

В этой статье:

  • Качественный генератор «пилы» на 555 таймере
  • Повторитель с огромным входным сопротивлением
  • Регулятор усиления от -1 до +1
  • Линейность на уровне профессионального оборудования, используя бюджетные ОУ

555 таймер

Важно: в данной конструкции необходимо использовать только качественный КМОП вариант 555 таймера. Например вот этот: TLC555 datasheet от TI.
Более старые, биполярные варианты 555, выдают совершенно неприличную грязь и к тому же так «бухают» в питание, что это уже ни чем не отфильтровывается.

На мой взгляд, одна из наиболее наглядных отрисовок блок-схемы микросхемы 555:

Блок-схема КМОП таймера 555
  1. GND — Ground = «Земля», отрицательный вывод питания
  2. TRIG — Trigger = Триггер
  3. OUT — Output = Выход
  4. RESET = Сброс
  5. CONT — Control voltage = Управляющее напряжение
  6. THRES — Threshold = Порог
  7. DISCH — Discharge = Разряд
  8. VDD — Positive supply voltage = Положительное напряжение питания

 

Задающий генератор пилообразного сигнала

Принцип работы данного генератора исключительно прост, по сути — используем 555 в стандартном включении.

Формирователь пилообразного сигнала

 

  • R1, R3 = 36 кОм
  • R2, R4 = 100 кОм
  • VT1 = MPS2907A ~= КТ361 🙂
  • C4 = 10 нФ
  • C1, C3 = 0.1 мкФ
  • C2 = 10 мкФ

Источник тока на транзисторе VT1 обеспечивает линейный заряд времязадающего конденсатора С4. Так же как и пороговые напряжения в 555 таймере, ток, генерируемый данным источником прямо пропорционален напряжению питания. Всё вместе это обеспечивает практически постоянную частоту генерации независимо от величины питающего напряжения.

Пороговое напряжение 555-го (вход 5 «CONT») слегка «притянуто» к земле, чтобы добавить доступного падения напряжения для работы источника тока.

Разряд времязадающего конденсатора производится быстро, через вывод 7 «DISCH». Надо заметить, что полевой транзистор задаёт постоянный ток разряда — спад пилы получается так же практически идеально линейный.

 

Повторитель с высоким входным импедансом

Полученный практически идеальный пилообразный сигнал на конденсаторе, к сожалению, не может быть подан прямиком в нагрузку — любая нагрузка будет искажать форму сигнала и влиять на частоту генерации. Необходим повторитель с возможно бОльшим входным импедансом. В моём варианте LM324 (datasheets: National/TI, Fairchild, OnSemi) отлично справляется с задачей, при условии использования внешних источников тока (об этом — чуть ниже).

Буфер с огромным входным импедансом
  • R5, R6 = 330 кОм
  • C5, C6 = 0.1 мкФ

Можно обойтись без усложнений и использовать простой буферный каскад, если вместо бюджетного LM324 применить высококлассные (дорогие) ОУ со входами на полевых транзисторах.

Регулятор усиления от -1 до +1

Удобно иметь возможность регулировать не только амплитуду сигнала, но так же и полярность.

Регулятор усиления от -1 до +1

 

Настоящий класс «А»

Для получения образцовой линейности усилителей применён тот же трюк, что и в моём генераторе синусоидального сигнала на мосте Вина: загрузка выходов ОУ источниками тока. Таким образом весьма посредственные выходные каскады ОУ LM324, в оригинале работающие практически в классе «B», т.е. без начального тока покоя, переводятся в честный отднотактный класс «А».

Источники тока для загрузки выходов ОУ
  • R9 = 6.2 кОм
  • VT2-VT4 = KT503

По факту в своём макете я использовал 5 транзисторов в параллель для загрузки всех 4 выходов LM324.

 

Работа от одного источника питания

Формирование виртуальной земли при питании от одного источника (батарей) подробно описано в статье про генератор на мосте Вина. В макете я использовал общие цепи питания для обоих генераторов.

Формирование виртуальной земли со сдвигом
  • VD2 = красный светодиод 1.7 Вольта
  • R10, R11 = 2 кОм
  • C10, C11 = 0.1 мкФ (керамика или плёнка)
  • C12, C13 >= 10 мкФ

 

Тестируем!

«Пила», как она есть на выходе генератора:

Почти идеальная пила уже от 6 вольт питания

Данная картинка получена при питании от батареек в сумме дающих 6 вольт. Если немного поднять питающее напряжение — форма сигнала станет неотличима на глаз от идеальной. Замечу, что в отличие от генератора на мосте Вина, у которого есть АРУ, здесь амплитуда сигнала на выходе генератора будет линейно зависеть от напряжения питания.

 

Собираем

TLС555CP + LM324 = два генератора

Примечание: настоятельно рекомендую поставить отдельный выключатель питания для микросхемы таймера, буде данная схема собрана как у меня в паре с генератором синусоиды с низким THD — помехи даже от КМОП 555 весьма ощутимы. Простенький «джампер» вполне подойдёт на роль такого выключателя (синенький, слева от 555 на картинке).

 

Классы усилителей звука: классификация — D, A, B, C, AB и другие. Ультралинейные и цифровые. Какой класс лучше?

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

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

Классификация

Класс усилителя — это величина выходящего сигнала, при которой он в функциональной схеме на протяжении одного рабочего цикла приводится в действие синусоидальным входящим сигналом и в результате этого воздействия изменяется. Классификация усилителей по классам зависит от параметров линейности режима, используемого для усиления поступающих сигналов от категорий с повышенной точностью при довольно сниженной эффективности до абсолютно нелинейных. В этом случае точность звуковоспроизведения сигнала не столь велика, зато КПД довольно высок. Все остальные классы усилителей являются некими промежуточными моделями между этими двумя группами.

Первая группа

Все классы усилителей условно можно разделить на две подгруппы. К первой относятся классические управляемые модели классов A, B, а также AB и C. Их категория обусловлена параметром их проводимости на определенном участке выходного сигнала. Таким образом, работа встроенного транзистора на выходе располагается посредине между «выкл» и «вкл».

Вторая группа

Ко второй категории устройств относят более современные модели, которые считаются так называемыми переключающимися классами — это модели D, E, F, а также G, S, H и T.

Эти усилители применяют в работе широтно-импульсную модуляцию, а также цифровые схемы для беспрерывного переведения сигнала между «полностью выкл» и «полностью вкл». Как следствие, происходит мощный выход в районе насыщения.

Описание популярных классов

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

А

Модели класса А получили наибольшее распространение благодаря простоте их конструкции. Это объясняется несколькими параметрами искажения входящего сигнала и, соответственно, высоким качеством звучания в сравнении со всеми остальными категориями усилительных установок. Модели, относящиеся к этой категории, характеризуются высокой линейностью по сравнению с прочими.

Обычно усилители класса А в своей работе используют единый вариант транзисторов. Его подключают к базовой конфигурации эмиттера для двух половин сигнала так, что германиевый транзистор неизменно идет сквозь него даже в том случае, если фазовый сигнал отсутствует. Это значит, что на выходе каскад не станет в полной мере проходить в область отсечки сигнала и насыщения. Он имеет собственную точку смещения примерно в центральной части линии нагрузки. Такое строение приводит к тому, что транзистор попросту не активируется — именно это считается одним из его базовых недостатков.

Чтобы устройство можно было классифицировать, как относящееся к этому классу, нулевой ток на холостом ходу в выходном каскаде должен равняться предельному току нагрузки либо даже превышать его — это позволяет обеспечить максимальный выходящий сигнал.

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

Поскольку усилители этой категории работают, как мы уже говорили, в ультралинейной области, то смещение постоянного тока должно быть установлено корректно — это позволит обеспечивать исправную работу и дает звуковой поток мощностью 24 Вт. Однако в связи с тем, что выходное устройство все время находится в отключенном состоянии, оно беспрерывно проводит ток, и это создает условия для постоянной потери мощности во всей конструкции. Такая особенность приводит к выделению большого объема тепла, при этом их КПД довольно низок — не превышает 40%, что делает их непрактичными, если речь идёт о каких-то мощных акустических системах. Помимо того, из-за повышенного тока холостого хода установки, блок питания должен иметь соответствующие габариты и быть максимально отфильтрован, в противном случае не избежать звучания усилителя и стороннего гула. Именно эти недостатки привели к тому, что производители вынуждены были продолжить работу над созданием усилителей более эффективной категории.

В

Усилители класса B были созданы производителями для решения проблем, связанных с низким КПД и повышенным уровнем перегрева, которые свойственны установкам предыдущей категории. В своей работе модели категории В применяют пару дополнительных транзисторов, как правило, биполярных. Их отличие в том, что для обеих половин сигнала выходной фронт построен по двухтактной схемотехнике, таким образом каждое транзисторное устройство дает усиление лишь наполовину выходного сигнала.

Базовый ток смещения уровня постоянного тока в усилителях этого класса отсутствует, поскольку ток его покоя равняется нулю, поэтому мощностные параметры постоянного тока обычно малы. Соответственно, и КПД его гораздо выше, нежели у устройств А. При этом когда сигнал принимает положительное значение, транзистор с положительным смещением ведет его, а отрицательный остаётся в выключенном состоянии. Аналогично в момент, когда входящий сигнал принимает отрицательное значение, положительный отключается, а отрицательно смещённый транзистор, наоборот, активируется и обеспечивает проведение отрицательной половины сигнала. В результате транзистор во время своей работы проводит 1/2 цикла только в положительном либо в отрицательном полупериоде поступающего сигнала.

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

Такая двухтактная конструкция примерно на 45-60% эффективнее, нежели усилители класса А. Тем не менее проблемы с моделями этого типа заключаются в том, что они дают существенные искажения в момент прохождения аудиосигнала из-за «мертвой зоны» транзисторов в коридоре входных напряжений со значениями от -0,7 В до +0,7 В.

Как все знают из курса физики, базовый эмиттер должен давать напряжение около 0,7 В для того, чтобы биполярный транзистор начал полноценную проводку. Пока это напряжение не превысит эту отметку, выходной транзистор не сместится до положения включения. Это значит, что половина сигнала, которая пойдёт в коридор 0,7 В, начнет воспроизводиться неточно. Соответственно, это делает устройства категории B практически непригодными для применения в прецизионных акустических установках.

Для того чтобы преодолеть эти искажения и были созданы так называемые компромиссные устройства класса AB.

АВ

Эта модель представляет собой некий тандем конструкции категории А и категории B. В наше время усилители типа AB считаются одними из самых распространенных вариантов конструкций. По принципу своей работы они немного напоминают изделия категории В, с тем только исключением, что оба транзисторных устройства могут в одно и то же время проводить сигнал возле точки пересечения осциллограмм. Это в полной мере устраняет все проблемы искажения сигнала предыдущего усилителя группы В. Разница состоит в том, что пара транзисторов имеет довольно малое напряжение смещения, как правило, оно составляет от 5 до 10% от параметров тока покоя. В этом случае проводящее устройство остаётся включённым дольше, чем время одного полупериода, но в то же время – это гораздо меньше, нежели полный цикл входного сигнала.

Можно с полной уверенностью сказать, что устройство типа AB считается отличным компромиссом между моделями класса А и моделями класса В с позиции КПД и линейности, в то время как эффективность трансформации звукового сигнала составляет приблизительно 50%.

С

Конструкция установок, относящихся к классу C, обладает максимальной эффективностью, но при этом довольно плохой линейностью в сравнении со всеми остальными категориями. Усилитель C-класса довольно заметно смещен, поэтому входной ток принимает нулевое значение и держится на этой отметке на протяжении более 1/2 цикла поступающего сигнала. В это время транзистор пребывает в режиме ожидания его выключения.

Подобная форма смещения транзистора обеспечивает наибольшую эффективность устройства, его КПД составляет порядка 80%, но при этом она вносит довольно значительные звуковые искажения в исходящий сигнал.

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

D

Усилитель категории D относится к двухканальным нелинейным импульсным моделям, их еще называют ШИМ-усилители.

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

Как правило, это высоковольтные модели, они рассчитаны на плату в 10000 ватт.

Другие

Усилитель класса F. Эти модели обеспечивают повышенную эффективность, их КПД составляет порядка 90%.

Усилитель класса G. Этот усилитель, по сути, представляет собой усовершенствованную высоколинейную конструкцию базового устройства класса AB на ТДА. Модели, относящиеся к данной категории, могут выполнять автоматическое переключение между разными линиями питания в случае изменения параметров поступающего сигнала. Подобное переключение многократно уменьшает энергопотребление и, соответственно, уменьшает расход мощности, которые вызываются утратой тепла.

Усилитель класса I. Такие модели имеют пару комплектов дополнительных выходных приспособлений. Перед включением они располагаются в двухтактной конфигурации. Первое устройство выполняет переключение положительной части сигнала, а второе — отвечает за переключение отрицательной, подобно усилителям категории B. При отсутствии сигнала аудио на входе или в случае, если сигнал достигает нулевой точки пересечения, переключающий механизм включается и выключается в одно время с основным циклом.

Усилитель класса S. Данный класс усилителей относят к категории нелинейного механизма переключения. По механизму своей работы они в чем-то похожи на усилители категории D. Такой усилитель производит преобразование аналоговых входящих сигналов в цифровые, многократно усиливая их. Таким образом, чтобы повысить мощность на выходе, обычно цифровой сигнал переключающего устройства либо полностью включен, либо полностью выключен, поэтому КПД таких устройств может составлять 100%.

Усилитель класса T. Ещё один вариант цифрового усилителя. Сегодня такие модели набирают всё большую популярность из-за присутствия микросхем, позволяющих выполнять цифровую обработку поступающего сигнала, а также встроенных многоканальных усилителей 3D-звучания. Такой эффект обеспечивается конструкцией, позволяющей преобразовывать аналоговые сигналы в звуки повышенной ШИМ цифрового типа. Конструкция устройств класса C объединяет параметры сигнала с пониженной степенью искажений, подобного АВ категории, в то время как сохраняют КПД на уровне моделей класса D.

Как определить?

Для начала остановимся на том, как в принципе функционирует усилитель. Наверняка вы будете удивлены, но по факту заводской усилитель ничего не усиливает. По сути, механизм его работы напоминает работу самого простого крана: вы крутите ручку и вода из водопровода начинает литься, сильнее или слабее, а если ее закрутить — то поток будет перекрыт. В усилителях все процессы происходят таким же образом. От мощного модуля питания ток проходит сквозь подключенный к устройству динамик. В данном случае функцию крана берут на себя транзисторы — на выходе степенью их закрытия и открытия управляет сигнал, который проходит на усилитель. От того, как именно этот кран функционирует, то есть как действуют выходные транзисторы, и определяется класс усилителей.

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

По этой причине транзисторы категории АВ приходится удерживать в приоткрытом состоянии даже в том случае, если сигнал отсутствует. Это необходимо для того, чтобы они начали работать сразу же, а не выжидали, пока сигнал дойдет до определённого уровня – только в этом случае усилитель сможет воспроизводить звук с минимальными искажениями. На практике это означает, что некоторая часть полезной энергии расходуется вхолостую. Только представьте, что вы откроете все водопроводные краны в квартире, и из них беспрерывно будет вытекать небольшая струйка воды. Как следствие, эффективность таких моделей не превышает 50-70%, именно низкий КПД и является главным минусом усилителей АВ класса.

Если говорить об устройствах D-класса, то принцип работы у них абсолютно такой же: они имеют свои выходные транзисторы, способные закрываться и открываться. Тем самым регулируется прохождение тока сквозь подведенные к ним динамики, вот только управляет их открытием уже сигнал, по своей конфигурации весьма далекий от входящего.

Именно так подается сигнал на выходные транзисторы устройств D-класса. В данном случае функционировать они станут совсем иначе: либо в полном объеме закрываться, либо открываться без каких-либо промежуточных значений. Это означает, что КПД таких моделей может быть приближен к 100%.

Конечно, передавать подобные сигналы на аудиосистемы рано, сперва ему следует вернуть стандартную конфигурацию. Это можно сделать посредством выходного дросселя, а также конденсатора — после их обработки на выходе формируется усиленный сигнал, который по своей форме полностью повторяет входящий. Именно он и передается на динамики.

Основное преимущество устройств D-класса – это повышенный КПД и, соответственно, более щадящее расходование энергии

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

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

Таким образом, если для подключения АС у вас достаточно площади, то вы вполне можете подобрать модель АВ-класса. За несколько десятилетий существования схемотехника этих моделей хорошо отработана, они дают довольно хорошее качество звучания, а в случае их поломки вы можете без проблем отремонтировать их в ближайшем сервисном центре.

Если участок для звуковой инсталляции ограничен, то стоит присмотреться к широкополосным моделям группы D. При тех же мощностных параметрах, что и изделия АВ-класса, они гораздо меньше и легче, притом меньше греются, и некоторые модели позволяют даже устанавливать их скрытно с наименьшими вмешательствами.

Для подключения сабвуферов максимальное преимущество у установок D-класса, так как темброблок басов представляет собой наиболее энергозатратный частотный диапазон — в данном случае КПД изделия имеют принципиальное значение, а в этом конкурентов изделиям D класса попросту нет.

В данном видео вы сможете нагляднее ознакомиться с классами усилителей звука.

Сериализаторы — Django REST framework

GitHub Следующие Предыдущая Поиск Фреймворк Django REST
  • Главная
  • Учебник
    • Быстрый старт
    • 1 — Сериализация
    • 2 — Запросы и ответы
    • 3 — Просмотры на основе классов
    • 4 — Аутентификация и разрешения
    • 5 — Отношения и гиперссылки API
    • 6 — Viewsets и маршрутизаторы
  • Руководство API
    • Запросы
    • Ответы
    • Просмотры
    • Общие представления
    • Наборы просмотров
    • Маршрутизаторы
    • Парсеры
    • Рендереры
    • Сериализаторы
    • Поля сериализатора
    • Отношения сериализатора
    • Валидаторы
    • Аутентификация
    • Разрешения
    • Кеширование
    • Дросселирование
    • Фильтрация
    • Пагинация
    • Управление версиями
    • Согласование содержания
    • Метаданные
    • Схемы
    • Суффиксы формата
    • Возврат URL-адресов
    • Исключения
    • Коды состояния
    • Тестирование
    • Настройки
  • Темы
    • Документирование вашего API
    • Клиенты API
    • Интернационализация
    • AJAX, CSRF и CORS
    • HTML и формы
    • Улучшения браузера
    • Доступный для просмотра API
    • ОТДЫХ, гипермедиа и ненависть
  • Сообщество
    • Учебники и ресурсы
    • Сторонние пакеты
    • Участие в REST framework
    • Управление проектом
    • Примечания к выпуску
    • 3.12 Объявление
    • 3.11 Объявление
    • 3.10 Объявление
    • 3.9 Объявление
    • 3.8 Объявление
    • 3.7 Объявление
    • 3.6 Объявление
    • 3.5 Объявление
    • 3.4 Объявление
    • 3.3 Объявление

производственная практика — Французский перевод — Linguee

Пригласите студентов совершить прогулку

[…] экскурсия по их сообществу, возможно, как a экскурсия по классу .

nationhood.ca

Inviter les lves marcher dans leur collectivit.

nationhood.ca

мы ek l y class field trip e v er y Среда […]

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

[…]

дня в неделю (занятия спортом)

brillantmont.ch

u n e so rtie d e class c ha que merc re di pour […]

visiter un site Suisse bien connu — quatre aprs-midi de sports par semaine (grand choix de sports)

brillantmont.ch

Институт природных ресурсов tu t e поездка в класс t o F WI 9/01 ноября.

dfo-mpo.gc.ca

Visite scolaire du Natural

[…] Ресурсы Institut e l ‘ Institut des e aux douces — […]

le 9 ноя. 2001.

dfo-mpo.gc.ca

Наше пожертвование в размере 50 000 долларов США образовательному партнерству Wonder of Wetlands с Ducks Unlimited Canada в 2004 году позволило более 1700 детям в

[…]

Саскатун, чтобы узнать о дикой природе и

[…] Сохранение водно-болотных угодий th ou g h экскурсии в класс a n d материалы для учителей.

rbc.com

Notre don de 50 000 $ Canards Illimits Canada (CIC) a permis plus de 1 700 enfants de Saskatoon de seiliariser avec

[…]

l’importance de la

[…] prservation de l a faune e t des milieux humides par des visites sur l e terrain e t du matriel […]

didactique.

rbc.com

В то время как риск серьезного заболевания из-за употребления непастеризованных соковых продуктов, как правило, низок для большинства взрослых, возможная опасность для уязвимых групп намного выше. Это становится даже

[…]

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

[…] фруктовые сады как пар. t o f экскурсии класса .

hc-sc.gc.ca

Bien que le risque de tomber gravement malade aprs uneir consomm du jus non pasteuris soit gnralement faible pour la plupart des Adults, ce risque est beaucoup plus grand pour les group

[…]

vulnrables, особые условия для посещения, или для посетителей s fait

[…] s ouvent partie de s so rtie s de classe .

hc-sc.gc.ca

Комната родителей играет

[…] неотъемлемая роль в классе, организация общественных мероприятий a n d экскурсии в класс .

lyceechicago.org

Les Родители dlgus jouent un rle

[…] important d an s la classe , org an isant diverses activ it s e t sorties e n co ll aburation […]

avec les enseignants.

lyceechicago.org

Чтобы увидеть больше фотографий

[…] эти события a n d экскурсии на занятия a n d мероприятия, […]

нажмите на фотографии ниже.

efiv.org

Pour voir plus de

[…] фотографии d e ce s vnements e t des sort ie s scolaires, […]

клика по фотографиям ci-dessous.

efiv.org

Project Webfoot обеспечивает обучение по водно-болотным угодьям через программу

[…] curriculum-base d i n class c o mp onent a nd a field trip или т.пл. вон.

bluewater.rbc.com

Ce projet offre un Programme d’education aux milieux humides

[…] comportan t des Cours mag is t ra ux et de s classes e n p lein r.

eaubleue.rbc.com

Я ответил ему, что мы все новички в Америке, и мы из ES O L class g o in g on a производственная практика .

america.gov

Ce que je peux faire pour eux, aussi minime soit-il, est un plus non seulement pour eux, mais pour moi.

america.gov

Если ученику

[…] участвуют в деятельности (например, г. a производственная практика o r s приспособление для портов), что потребует missi ng класс o r o школьное мероприятие, разрешение […]

надо искать

[…]

от всех соответствующих учителей заранее.

ecolint.ch

Si un lve Partition

[…] une act iv it ( par exc ple voyage sur le t er rain ou rencontre sportive) qui l’empche de ven n classe , une perm is sion doit […]

tre demande tous

[…]

les professeurs touchs par l’absence.

ecolint.ch

Pl an a field trip f o rt h e class a a 9015 выйти к местным […]

кенотаф и принять участие в поминальной службе.

legion.ca

Planif ie z une v is ite en gr ou pe de vo tre class u n c nota ph e local […

и участие в сервисе сувениров.

legion.ca

Ta ke a производственная практика t o район , где вы выросли, чтобы увидеть, что там сейчас.

lesenfantsavanttout.com

Осенние курсы и полевые классы 2019

9015 0 Испанский Контекст 9015 1 Коричневый 9015 1 3

9015 Этнический национализм, гражданская война и последствия
[Хорватия: день 2 — 7 октября 2019 г.]

4 Полевые работы Этномузыкологический тур по Моурарии
[Португалия: день 1 — 26 сентября 2019 г.]
Антропология Встречает Инструктор Кредиты
Полевая работа: Символы самобытности: польский народ, еда и посты : День 2 — 16 сентября 2019 г.] B
11:10 — 12:30
Коэн 3
Полевые работы: Кандомбл в Городе женщин
[Бразилия: День 1 — ноября 10, 2019]
B
8:10 — 9:30
Cohen 3
Business Встречает Инструктор Кредиты
Полевые работы: 907ha [Гана: день 2, 29 октября 2019 г.] A
11:10 — 12:30
Коричневый 3
Ботаника / зоология Встреча с инструктором Кредиты
Полевые работы: Экология тропических лесов: небо вверху, деревья внизу
[Гана: день 5 — 1 ноября 2019 г.]
B
11:10 — 12:30
Huyvaert 3
Полевые работы: Животные, люди и места: Одно здоровье в раю
[Португалия: День 3 (Португалия) / День 2 (Коста-Рика)]
A
12:40 — 14:00
Huyvaert 4
Английский Встречает Инструктор Кредиты
Полевая работа: В поисках социального реализма в литературной литературе1 Гуаякиль
1–6 декабря 2019 г.
12:40 — 14:00
Saville 3
Полевые работы: Изучение местных праздников и драматических традиций
[Гана: день 1 — 28 октября 2019 г.]
B
11:10 — 12:30
Вс árez-García 3
Полевые работы: По следам Тахир Шаха и пирата Барбари Мурада Рейса
[Марокко: день 2, 16 октября 2019 г.]
B
14:10 — 15:30
Saville 3
Полевые работы: «Жемчужина Адриатики»: старый город и Ректорский дворец
[Хорватия: день 1 — 6 октября 2019 г.]
A
17:10 — 18: 30
Núñez 3
Экономика Встречает Инструктор Кредиты
Полевые работы: Границы и стены
1 октября 906 [Испания, 2019: День 3-901
] 14:10 — 15:30
Barreto 3
Полевые работы: Микрокредитование в Касабланке
[Марокко: День 2 — 16 октября 2019 г.]
B
14:10 — 15:30
Баррето 3
Этнические исследования Встречает Инструктор Кредиты
Полевая работа: Афро-эквадорское искусство и мастерская маримбы
[Эквадор: день 2 — 3 декабря 2019 г.]
A
15:40 — : 00
Vaught 3
Пищевые науки и питание человека Встречает Инструктор Кредиты
Полевые работы: От фермы до вилки
сентября, Португалия, 26 сентября: день 2019]
A
15:40 — 17:00
Harris 3
Полевые работы: Кулинария для здоровья — Тайны Средиземноморья
[Испания: день 3 — 1 октября 2019 г.]
A
14:10 — 15:30
Harris 3
Рыба / Дикая природа / Биология сохранения Встречает Инструктор Кредиты
9 0774 Полевые работы: Наблюдение за китами и тунцом на юге Испании
[Испания: День 3 — 1 октября 2019 г.]
A
15:40 — 17:00
Доэрти 3
История Встречи Инструктор Кредиты
Полевые работы: Война и Холокост
[Польша: День 1 — 15 сентября 2019 г.]
B
17:10 — 18:30
Madsen 3
Полевая работа: Посол на день
[Марокко: День 2 — 16 октября 2019 г.]
B
14:10 — 15:30
Madsen 3
Полевая работа: Изучение истории и памяти работорговли
[Гана: день 5 — 1 ноября 2019 г.]
B
11:10 — 12:30
Vaught 3
Международное образование соответствует Инструктор Cr edits
Полевые работы: В джунглях, могучие джунгли
[Коста-Рика: день 2 — 12 декабря 2019 г.]
A
12:40 — 14:00
Madsen 3
Полевая работа: Расширение эмпатии и установление связей
[Коста-Рика: день 2 — 12 декабря 2019 г.]
B
14:10 — 15:30
Lawson 3
Международные исследования Встречает Инструктор Кредиты
Полевая работа: Политическая экономия расы и африканская культура в Бразилии
[Бразилия: день 1 — 10 ноября 2019 г.]
A
14:10 — 15:30
Vaught 3
Внутриуниверситетский Встречает Инструктор Кредиты
Полевая работа: Обмен студентами колледжа с
[Польша: День 1- 15 сентября 2019 г.]
A
8:30 — 9:30
ДиГрегорио 1
Журналистика и коммуникация со СМИ Встречает Инструктор Кредиты
Марокко
[Марокко: День 2 — 16 октября 2019 г.]
B
14:10 — 15:30
Рис 3
Полевые работы: Гданьский военный музей
[Польша: День 1- 15 сентября 2019 г.]
B
17:10 — 18:30
Рис 3
Испанский Встречает Преподаватель Кредиты
Полевая работа: 907 : От рынков и кухни к музыке и культурной самобытности
[Эквадор: день 1 — 2 декабря 2019 г.]
A
15:40 — 17:00
Суарес-Гарсия 3
9 0774 Полевые работы: Гуаякиль: рынки и местная кухня
[Эквадор: день 2 — 3 декабря 2019 г.]
B
15:40 — 17:00
Нуньес 3
Полевые работы: Кадис и Херес: Страна шерри, вина и лошадей
[Испания: день 3 — 1 октября 2019 г.]
A
14:10 — 15:30
Núñez 3
Полевые работы: Экономические Влияние природных территорий: Коста-Рика
[Коста-Рика: день 2 — 12 декабря 2019 г.]
A
12:40 — 14:00
Суарес-Гарсия 3
Руководство Встречает Инструктор Кредиты
Полевые работы: Изучение цепочки создания стоимости кофе от добычи до переработки
[Коста-Рика: день 2 — 12 декабря 2019 г.]
A
12:40 — 14:00
Deif 3
Поле Работа: Применение управленческой практики в Латинской Америке
[Бразилия: День 2 — 11 ноября 2019 г.]
B
12:40 — 14:00
Deif 3
Полевая работа: Творчество , Инновации и создание ценности (Gioia)
[Бразилия: день 2 — 11 ноября 2019 г.]
B
15:40 — 17:00
Gioia 3
Работа на местах: Социальное предпринимательство как инструмент развития
[Марокко: День 2 — 16 октября 2019 г.]
B
14:10 — 15:30
Deif 3
Полевые работы: Сохранение природы и экотуризм
[Бразилия : День 1 — 10 ноября 2019 г.]
B
12:40 — 14:00
Коричневый 3
Полевые работы: Возобновляемое будущее Лиссабона
[Португалия: День 1 — 26 сентября 2019 г. ]
A
8:10 — 9:30
3
Маркетинг Встречает Инструктор Кредиты
Полевая работа: Создание ценности для семестра в море
[Польша: День 1 — 15 сентября 2019 г.]
B 15:40 — 17:00
Дэвис 3
Полевые работы: Создание ценности для Гданьского Шекспировского театра
[Польша: День 6 — 20 сентября 2019 г.]
B
17:10 — 18 : 30
Дэвис 3
Полевые работы: Создание социальной и экономической ценности для глобальной зоны справедливой торговли мам
[Гана: День 1 — 28 октября 2019 г.]
A
11:10 — 12:30
Дэвис 3
Музыка Встречает Инструктор Кредиты
Полевые работы: Испанская культура, кухня и танцы фламенко
[Испания: ay 3 — 1 октября 2019 г.]
A
9:40 — 11:00
Byerly 3
Полевые работы: Африканский кружок барабанщиков, кухня и танцы
[Гана: день 1 — октябрь 28, 2019]
A
11:10 — 12:30
Byerly 3
Природные ресурсы Встречает Инструктор Кредиты
Полевые работы: Леса
[Коста-Рика: день 2 — 12 декабря 2019 г.]
A
12:40 — 14:00
Sobey 3
Полевые работы: Изучение прибрежной среды Португалии
[Португалия : День 1 — 26 сентября 2019 г.]
B
14:10 — 15:30
Sobey 3
Полевые работы: Мангровые леса на океанской байдарке
[Эквадор: День 2 — 3 декабря , 2019]
B
15:40 — 17:00
Sobey 3
Полевые работы: Посещение участков, связанных с океанографией, в Лиссабоне
[Португалия: день 2 — 27 сентября 2019 г.]
A
14:10 — 15: 30
Берман 3
Полевые работы: Там, где река впадает в море: перекресток заповедников в Эквадоре
[Эквадор: день 1 — 2 декабря 2019 г.]
B
15:40 — 17 : 00
Huyvaert 3
Природные ресурсы Отдых и туризм Встречает Инструктор Кредиты
Полевые работы: Игра престолов 2 — День 9077 в Хорватии , 2019] A
17:10 — 18:30
Hudson 3
Полевые работы: Влияние корневого туризма в Гане
[Гана: день 5 — 1 ноября 2019 г.]
В
9:40 — 11:00
Гудзон 3
Философия и религиоведение Встреча Инструктор Кредиты
Полевые работы: Уборка урожая в октябре 2019 г., День Тумана в Марокко, 2: ] B
14:10 — 15:30
Shockley 3
Полевые работы: Священные места в Касабланке
[Марокко: день 2 — 16 октября 2019 г.]
A
17: 10 — 18:30
Bratt 3
Полевые работы: Обрамление моральной трагедии: рабские замки Ганы
[Гана: день 5 — 1 ноября 2019 г.]
B
11:10 — 12: 30
Shockley 3
Полевые работы: Морская жизнь, находящаяся под угрозой: ценность биоразнообразия
[Бразилия: день 1 — 10 ноября 2019 г.]
A
14:10 — 15:30
Шокли
Полевая работа: Африканцы и европейцы в бразильской религии
[Бразилия: День 2 — 11 ноября 2019 г.]
B
12:40 — 14:00
Bratt 3
Полевые работы: След Колумба
[Испания: День 3 — 1 октября 2019 г.]
A
14:10 — 15:30
Bratt 3
Политология Встречает Инструктор Кредиты
Полевые работы: Дубровник на войне
[Хорватия: День 2 — 7 октября 2019]
A
12:40 — 14:00
van der Westhuizen 3
Полевые работы: Африканские корни Лиссабона
[Португалия: День 1 — 26 сентября 2019]
B
17:10 — 18:30
van der Westhuizen 3
Полевые работы : Роли НПО в Вс. Дебаты о окрашиваемости
[Гана: День 1 — 28 октября 2019 г.]
A
15:40 — 17:00
van der Westhuizen 3
Психология Встречает Инструктор 64 64
Полевая работа: Психологическое развитие в сельских общинах по сравнению с деревенскими общинами в Гане: фокус на подростковом и развивающемся зрелом возрасте
[Гана: день 2 — 29 октября 2019 г.]
A
11:10 — 12:30
Lynch 3
Полевая работа: Политика в отношении наркотиков и лечение наркозависимости в Португалии
[Португалия: День 1 — 26 сентября 2019 г.]
A
15:40 — 17:00
Lynch 3
Полевая работа: Психиатрическое лечение в Марокко
[Марокко: День 2 — 16 октября 2019 г.]
B
12:40 — 14:00
Lynch 3
Hos питалити Менеджмент Встречает Инструктор Кредиты
Полевая работа: Гастрономия и гостеприимство Лиссабонский стиль!
[Португалия: день 1 — 26 сентября 2019 г.]
A
15:40 — 17:00
Hudson 3
Полевые работы: Экскурсия на ферму какао «От бобов до баров»
[ Эквадор: День 1 — 2 декабря 2019 г.]
B
15:40 — 17:00
Харрис 3
Социология Встречает Инструктор Кредиты
B
12:40 — 14:00
Massey 3
Полевые работы: Class , Гендерное и этническое неравенство: видимые и невидимые
[Бразилия: день 1 — 10 ноября 2019 г.]
A
17:10 — 18:30
Massey 3
Полевые работы: От Командование на рынок: неустойчивый путь Польши
[Польша: День 2 — 16 сентября 2019 г.]
B
17:10 — 18:30
Massey 3
Коммуникационные исследования Встречает Инструктор Кредиты
A
15:40 — 17:00
Misner 3
Полевая работа: Европейский центр солидарности
[Польша: День 2 — 16 сентября 2019 г.]
B
15:40 — 17:00
Byerly 3
Полевая работа: Семинар по осознанности
[Хорватия: День 1-6 октября 2019 г.]
A
14:10 — 15:30
Misner 3
Полевая работа: Культурная идентичность: истории из концентрационного лагеря Штуттхоф
[Польша: День 2 — 16 сентября 2019 г.]
B
1 1:10 — 12:30
Misner 3

Как визуализировать форму Django вручную

Работа с пользовательским вводом — очень распространенная задача в любом веб-приложении или веб-сайте.Стандартный способ сделать это — через HTML-формы, в которых пользователь вводит некоторые данные, отправляет их на сервер, а затем сервер что-то с ними делает. В настоящее время, есть вероятность, что вы уже слышали эту цитату: «Всякий ввод — зло!» Я не знаю, кто это сказал первым, но это было очень хорошо сказано. По правде говоря, каждый вход в ваше приложение — это дверь, потенциальный вектор атаки. Так что вы лучше закрепите все двери! Чтобы облегчить вашу жизнь и дать вам некоторое спокойствие, Django предлагает очень богатый, надежный и безопасный API форм.И вы обязательно должны его использовать, независимо от того, насколько проста ваша HTML-форма.

Управление пользовательским вводом, обработка форм — довольно сложная задача, поскольку она включает взаимодействие со многими уровнями ваше приложение. Он должен получить доступ к базе данных; очищать, проверять, преобразовывать и гарантировать целостность данные; иногда ему необходимо взаимодействовать с несколькими моделями, передавать удобочитаемые сообщения об ошибках, а затем наконец, он также должен перевести весь код Python, представляющий ваши модели, во входные данные HTML.В некоторых случаях, эти входные данные HTML могут включать код JavaScript и CSS (например, настраиваемое средство выбора даты или поле автозаполнения).

Дело в том, что Django очень хорошо выполняет серверную часть. Но это не сильно влияет на клиентскую часть. HTML формы, автоматически сгенерированные Django, полностью функциональны и могут использоваться как есть. Но это очень грубо, это просто простой HTML, без CSS и без JavaScripts. Это было сделано таким образом, чтобы вы могли полностью контролировать, как представлять формы. так, чтобы соответствовать веб-дизайну вашего приложения.На стороне сервера немного иначе, так как вещи больше стандартизирован, поэтому большая часть функций, предлагаемых API форм, работает «из коробки». А в особых случаях он предоставляет множество способов настройки.

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

Вот содержание статьи:


Рабочий пример

На протяжении всего урока я буду использовать следующее определение формы, чтобы проиллюстрировать примеры:

форм.ру

  из форм импорта django

класс ContactForm (forms.Form):
    name = forms.CharField (max_length = 30)
    электронная почта = forms.EmailField (max_length = 254)
    message = forms.CharField (
        max_length = 2000,
        widget = forms.Textarea (),
        help_text = 'Напишите здесь свое сообщение!'
    )
    source = forms.CharField (# Скрытый ввод для внутреннего использования
        max_length = 50, # сказать, с какой страницы пользователь отправил сообщение
        виджет = forms.HiddenInput ()
    )

    def clean (self):
        cleaned_data = super (ContactForm, сам).чистый ()
        name = cleaned_data.get ('имя')
        email = cleaned_data.get ('электронная почта')
        message = cleaned_data.get ('сообщение')
        если не имя и не адрес электронной почты, а не сообщение:
            поднять формы.ValidationError ('Вы должны что-то написать!')  

И следующее представление просто для загрузки формы и запуска процесса проверки, чтобы мы могли иметь форму в другом состояния:

views.py

  из django.shortcuts import render
из .формы импорт ContactForm

def home (запрос):
    если request.method == 'POST':
        form = ContactForm (request.POST)
        если form.is_valid ():
            pass # ничего не делает, просто запускает проверку
    еще:
        form = ContactForm ()
    return render (request, 'home.html', {'form': form})  

Понимание процесса визуализации

Во многих руководствах или в официальной документации Django очень часто встречаются такие шаблоны форм:

  
{% csrf_token%} {{form}}

Примечание: Может быть, вас интересует атрибут novalidate в форме.В реальном случае вы, вероятно, не будете хочу его использовать. Это предотвращает «проверку» данных браузером перед отправкой на сервер. Как в примеры, которые мы собираемся изучить. У меня есть только «обязательные» ошибки в полях, это помешало бы нам увидеть на стороне сервера фактическая проверка данных и изучение состояний ошибок при отрисовке формы.

Похоже на волшебство, правда? Поскольку эта конкретная форма может содержать 50 полей, а простая команда {{form}} отобразит их все в шаблоне.

Когда мы пишем {{form}} в шаблоне, на самом деле он обращается к __str__ из класса BaseForm . Метод __str__ используется для предоставления строковое представление объекта. Если вы посмотрите исходный код, вы увидите, что он возвращает as_table () метод. Итак, в основном {{form}} и {{form.as_table}} — это тоже самое.

API форм предлагает три метода для автоматического отображения HTML-формы:

Все они работают более или менее одинаково, разница заключается в коде HTML, который обертывает входные данные.

Ниже приведен результат предыдущего фрагмента кода:

Но если {{form}} и {{form.as_table}} — одно и то же, вывод точно не выглядит как стол, правда? Это потому, что as_table () и as_ul () не создают

и
    теги, поэтому мы должны добавить их сами.

    Итак, правильный способ сделать это:

      
    {% csrf_token%}
{{form}}

Теперь это имеет смысл, верно? Без тега

браузер действительно не знает, как отображать вывод HTML, поэтому он просто представляет все видимые поля в строке, поскольку у нас еще нет CSS.

Если вы посмотрите на частный метод _html_output , определенный в BaseForm , который используется всеми как методы _ * () , вы увидите, что это довольно сложный метод с 76 строками код, и он делает много вещей. Ничего страшного, потому что этот метод хорошо протестирован и является частью ядра форм API, лежащая в основе механика, которая заставляет все работать. При работе над собственной логикой отрисовки формы вам не нужно напишите код Python для выполнения этой работы.Гораздо лучше делать это с помощью движка шаблонов Django, так как вы можете добиться большего чистый и простой в обслуживании код.

Я упоминаю здесь метод _html_output , потому что мы можем использовать его для анализа того, какой код он генерирует, какой он действительно работает, поэтому мы можем имитировать его с помощью механизма шаблонов. Это также очень хорошее упражнение, чтобы прочитать источник code и освоитесь с ним. Это отличный источник информации. Хотя документация Django очень подробный и обширный, здесь и там всегда есть какие-то скрытые детали.Вы также получите возможность увидеть на примерах как умные кодеры решали конкретные задачи. В конце концов, это проект с открытым исходным кодом и зрелым процессом разработки. что многие внесли свой вклад, так что, скорее всего, вы читаете оптимальный код.

Так вот, вкратце, что делает _html_output :

  • Агрегировать ошибки, которые не привязаны к определенным полям (ошибки, не связанные с полями), и ошибки из скрытых полей;
  • Поместите ошибки, не связанные с полями, и ошибки со скрытыми полями в верхней части формы;
  • Перебрать все поля формы;
  • Отображать поля формы одно за другим;
    • Отображает имя поля в теге метки;
    • Если есть ошибки полей, сначала визуализируйте список HTML с ошибками;
    • Отображает ввод HTML для поля;
    • Если есть текст справки, отобразите его после поля.

Вот как выглядит второе состояние формы, вызывающее все ошибки проверки:

Теперь, когда мы знаем, что он делает, мы можем попытаться имитировать то же поведение, используя механизм шаблонов. Таким образом, мы будем иметь гораздо больший контроль над процессом рендеринга:

  
{% csrf_token%} {{form.non_field_errors}} {% для скрытого_поля в форме.hidden_fields%} {{hidden_field.ошибки}} {{hidden_field}} {% endfor%}
{% для поля в form.visible_fields%} {% endfor%}
{{field.label_tag}} {{field.errors}} {{поле}} {{field.help_text}}

Вы заметите, что результат немного отличается, но все элементы присутствуют.Дело в том, что автомат создание HTML только с использованием {{form}} использует преимущества языка Python, поэтому может играть с конкатенацией строк, объединением списков (ошибки без полей + ошибки со скрытыми полями) и тому подобное. Механизм шаблонов более ограничен и ограничен, но это не проблема. Мне нравится движок шаблонов Django, потому что он не позволяет выполнять большую часть логики кода в шаблоне.

Единственная реальная проблема — это случайное «Это поле обязательно» вверху, которое относится к исходному полю .Но мы можем улучшить это. Давайте продолжим расширять визуализацию формы, чтобы мы могли еще больше контролировать ее:

  
{% csrf_token%} {% if form.non_field_errors%}
    {% для ошибки в form.non_field_errors%}
  • {{error}}
  • {% endfor%}
{% endif%} {% для скрытого_поля в форме.hidden_fields%} {% if hidden_field.errors%}
    {% для ошибки в hidden_field.ошибки%}
  • (Скрытое поле {{hidden_field.name}}) {{error}}
  • {% endfor%}
{% endif%} {{hidden_field}} {% endfor%} {% для поля в form.visible_fields%} {% endfor%}
{{field.label_tag}} {% if field.errors%}
    {% для ошибки в field.errors%}
  • {{error}}
  • {% endfor%}
{% endif%} {{поле}} {% если поле.help_text%}
{{field.help_text}} {% endif%}

Намного ближе, правда?

Теперь, когда мы знаем, как «расширить» разметку {{form}} , давайте попробуем сделать ее красивее. Возможно, используя библиотеку Bootstrap 4.


Доступ к полям формы по отдельности

Нам не нужен цикл for для отображения полей формы.Но это очень удобный способ сделать это, особенно если вы не есть особые требования к размещению элементов.

Вот как мы можем ссылаться на поля формы одно за другим:

  
{% csrf_token%} {{form.non_field_errors}} {{form.source.errors}} {{form.source}}
{{form.name.label_tag}} {{form.name.errors}} {{форма.имя }}
{{form.email.label_tag}} {{form.email.errors}} {{form.email}}
{{form.message.label_tag}} {{form.message.errors}} {{form.message}}
{{form.message.help_text}}

Это не очень СУХОЕ решение.Но хорошо знать, как это делать. Иногда у вас может быть очень конкретный вариант использования, который вам нужно будет самостоятельно разместить поля в HTML.


Расширение полей формы

Мы все еще можем копнуть глубже и расширить разметку {{field}} (или, если вы делаете это индивидуально, например, поля {{form.name}} или {{form.email}} ). Но теперь все становится немного сложнее, потому что мы говорим о виджетах.Например, имя поле преобразуется в тег , а поле электронной почты преобразуется в тег, и, что еще более проблематично, поле сообщения преобразуется в Тег .

На этом этапе Django использует небольшие шаблоны HTML для генерации вывод HTML полей.

Итак, давайте посмотрим, как это делает Django. Если мы откроем текст.html или email.html из папки виджетов, мы увидим, что он просто включает файл шаблона input.html:

  {% include "django / forms / widgets / input.html"%}  

Это говорит о том, что шаблон input.html , вероятно, является наиболее общим, особенности рендеринга могут быть внутри него. Итак, посмотрим:

    

В основном этот небольшой шаблон устанавливает тип для ввода , это имя , которое используется для доступа к данным в запросе объект. Например, вход с именем «сообщение», если он отправлен на сервер, доступен через request.POST ['сообщение'] .

По-прежнему во фрагменте шаблона input.html он также устанавливает текущее значение поля или оставляет его пустым, если нет данных.Это важный элемент в шаблоне, потому что именно он сохраняет состояние формы после ее отправлено и не было успешно обработано (форма недействительна).

Наконец, он включает шаблон attrs.html, который отвечает за установка атрибутов, таких как maxlength , требуется , заполнитель , стиль или любой другой атрибут HTML. Это широкие возможности настройки в определении формы.

Если вам интересно узнать об атрибуте attrs.html , вот как это выглядит:

  {% для имени, значения в widget.attrs.items%}
  {%, если значение не False%}
    {{name}} {%, если значение не истинно%} = "{{value | stringformat: 's'}}" {% endif%}
  {% endif%}
{% endfor%}  

Теперь, если вы действительно хотите создать входные данные самостоятельно, вы можете сделать это следующим образом (только поле name для краткость):

    

Или немного лучше:

    

Возможно, вы уже поняли, что это не лучший способ работы с формами.И, может быть, вы тоже спрашиваете себя почему иногда мы называем определенный атрибут {{form.name. }} , а в других ситуациях мы используем {{form.name.field. }} .

Я не хочу сейчас вдаваться в подробности, но в основном form.name — это BoundField (поле + данные) instance, а затем form.name.field — это определение поля, которое является экземпляром forms.CharField .Это почему одни значения доступны в экземпляре связанного поля, а другие — в определении поля char.

В любом определении формы __iter__ формы возвращает список из экземпляров BoundField , аналогично visible_fields () и hidden_fields () методы также возвращают экземпляров BoundField . Теперь, если вы получите доступ к form.fields , это относится к списку CharField , EmailField и всем другим определениям полей и т. Д.Если это тоже много информации для вас прямо сейчас, ничего страшного, вам не нужно беспокоиться об этом прямо сейчас.


Использование пользовательских атрибутов HTML

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

forms.py

  класс ColorfulContactForm (forms.Форма):
    name = forms.CharField (
        max_length = 30,
        widget = forms.TextInput (
            attrs = {
                'стиль': 'цвет границы: синий;',
                'placeholder': 'Напишите здесь свое имя'
            }
        )
    )
    электронная почта = forms.EmailField (
        max_length = 254,
        widget = forms.EmailInput (attrs = {'style': 'border-color: green;'})
    )
    message = forms.CharField (
        max_length = 2000,
        widget = forms.Textarea (attrs = {'style': 'border-color: orange;'}),
        help_text = 'Напишите здесь свое сообщение!'
    )  

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


Использование настроек виджета Django

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

Библиотека django-widget-tweaks — подходящий инструмент для работы. Это позволяет сохранить настройки формы по умолчанию и просто добавить что вам нужно. Это очень удобно, особенно при работе с ModelForms , так как сокращает объем кода. вы должны писать для выполнения простых задач.

Я не буду вдаваться в подробности о django-widget-tweaks , потому что у меня есть статья, посвященная этому: Как использовать django-widget-tweaks.

Вот краткое руководство по началу работы:

Сначала установите его с помощью pip:

  pip install django-widget-tweaks  

Добавьте его в INSTALLED_APPS :

  INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.сессий ',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'widget_tweaks',
]  

Загрузите его в шаблон:

  {% load widget_tweaks%}



  
   Простое лучше, чем сложное 


  ...   

И мы готовы его использовать! В основном мы будем использовать тег шаблона {% render_field%} . Вы будете посмотрите в следующем примере, что мы можем просто поместить атрибуты, как если бы мы делали это с необработанным HTML:

  
{% csrf_token%} {{форма.non_field_errors}} {% для скрытого_поля в форме.hidden_fields%} {{hidden_field.errors}} {{hidden_field}} {% endfor%} {% для поля в form.visible_fields%} {% endfor%}
{{field.label_tag}} {{field.errors}} {% render_field field placeholder = field.name%} {{field.help_text}}

Это очень удобно, особенно в тех случаях, когда вам просто нужно добавить класс CSS.Это случай использования Шаблоны форм Bootstrap 4.


Визуализация бутстрапа 4 форм

В основном, чтобы использовать библиотеку Bootstrap 4, я просто включил ссылку CDN, которую они предоставляют, в свой шаблон:

  
  
  
  
   Простое лучше, чем сложное 
  

Эта часть статьи будет более конкретной, так как я не буду исследовать особенности Bootstrap 4. реализация.Их документация великолепна и богата примерами. Если вы не очень знакомы, вы можете перейти к Раздел Документация / Компоненты / Формы для получения дополнительной информации.

Давайте сначала сосредоточимся на представлении входных данных, мы вернемся к части ошибок позже. Вот как мы можем представить та же форма с использованием тегов Bootstrap 4:

  
{% csrf_token%} {% для скрытого_поля в форме.hidden_fields%} {{hidden_field}} {% endfor%} {% для поля в форме.visible_fields%}
{{field.label_tag}} {{поле}} {% if field.help_text%} {{field.help_text}} {% endif%}
{% endfor%}

Поля ввода выглядят неработающими. Это связано с тем, что формы Bootstrap 4 ожидают элемента управления формы класса CSS в HTML-входы. Давайте исправим это с помощью того, что мы узнали в последнем разделе этой статьи:

  {% load widget_tweaks%}

{% csrf_token%} {% для скрытого_поля в форме.hidden_fields%} {{hidden_field}} {% endfor%} {% для поля в form.visible_fields%}
{{field.label_tag}} {% render_field field%} {% if field.help_text%} {{field.help_text}} {% endif%}
{% endfor%}

Намного лучше. Теперь давайте посмотрим на ситуацию с проверкой и ошибками. Я собираюсь использовать компонент alert для не ошибки полей, а для полей я просто поиграю с правильными классами CSS, которые предоставляет Bootstrap 4.

  {% load widget_tweaks%}

{% csrf_token%} {% для скрытого_поля в форме.hidden_fields%} {{hidden_field}} {% endfor%} {% if form.non_field_errors%}
{% для ошибки в form.non_field_errors%} {{ ошибка }} {% endfor%}
{% endif%} {% для поля в form.visible_fields%}
{{field.label_tag}} {% if form.is_bound%} {% если поле.ошибки%} {% render_field field%} {% для ошибки в field.errors%}
{{ ошибка }}
{% endfor%} {% else%} {% render_field field%} {% endif%} {% else%} {% render_field field%} {% endif%} {% if field.help_text%} {{field.help_text}} {% endif%}
{% endfor%}

И вот результат:

Это очень круто, потому что он отмечает зеленым цветом поля, прошедшие проверку:

Давайте внимательно посмотрим, что происходит.Мы можем улучшить фрагмент кода, но я предпочел оставить его таким, вы можете лучше понять логику рендеринга шаблона.

Сначала я вызываю метод form.is_bound . Он сообщает нам, есть ли в форме данные или нет. Когда мы впервые инициализируем форму form = ContactForm () , метод form.is_bound () вернет False . После отправки form.is_bound () вернет True . Итак, мы можем поиграть с ним, чтобы узнать, произошел ли уже процесс проверки или нет.

Затем, когда проверка уже прошла, я просто помечаю поле CSS-классом .is-invalid и . Действительно , в зависимости от случая. Они отвечают за окрашивание компонентов формы в красный или зеленый цвет.


Повторное использование компонентов формы

Теперь мы можем скопировать существующий код во внешний файл и повторно использовать наш фрагмент кода для других форм.

включает / bs4_form.html

  {% load widget_tweaks%}

{% для скрытого_поля в форме.hidden_fields%}
  {{hidden_field}}
{% endfor%}

{% if form.non_field_errors%}
  
{% для ошибки в form.non_field_errors%} {{ ошибка }} {% endfor%}
{% endif%} {% для поля в form.visible_fields%}
{{field.label_tag}} {% if form.is_bound%} {% if field.errors%} {% render_field field%} {% для ошибки в field.errors%}
{{ ошибка }}
{% endfor%} {% else%} {% render_field field%} {% endif%} {% else%} {% render_field field%} {% endif%} {% если поле.help_text%} {{field.help_text}} {% endif%}
{% endfor%}

Теперь определение формы может быть таким простым, как:

  
{% csrf_token%} {% include 'includes / bs4_form.html' с form = form%}

Например, используя приведенный выше фрагмент кода, мы используем его для обработки UserCreationForm , которая является встроенной формой который живет внутри django.contrib.auth модуль. Ниже результат:


Выводы

Эта статья стала больше, чем я ожидал. Сначала я подумал написать просто краткое руководство по форме рендеринг. Затем я вспомнил, что у меня уже есть подробное руководство, объясняющее как использовать django-widget-tweaks. Поэтому вместо этого я решил углубиться в детали и изучить некоторые механизмы API форм.

У меня будет следующая статья, посвященная сложным формам, рендерингу всех флажков, полям выбора, дате picker, а также о разработке собственных пользовательских виджетов.

Надеюсь, вы узнали что-то новое или получили удовольствие от чтения этой статьи. Если у вас есть вопросы или вы хотите обсудить подробнее по теме, пожалуйста, оставьте комментарий ниже!

Как обычно, вы можете найти исходный код и все примеры на GitHub.

.

Author:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *