Найти Π² Π”Π·Π΅Π½Π΅
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста

🐍🎸 ΠšΡƒΡ€Ρ Django: БлоТная Ρ„ΠΎΡ€ΠΌΠ° с кастомной ΠΊΠ°ΠΏΡ‡Π΅ΠΉ

ОглавлСниС

Π”Π΅Π»Π°Π΅ΠΌ Π°Π½ΠΊΠ΅Ρ‚Ρƒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ, Π·Π°Ρ‰ΠΈΡ‰Π°Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°ΠΏΡ‡ΠΈ, автоматичСски отправляСм Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° email.

← Π§Π°ΡΡ‚ΡŒ 3

ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ

ΠžΠ±Π·ΠΎΡ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

   АнкСта ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°
АнкСта ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°

АнкСта ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π° – Ρ„ΠΎΡ€ΠΌΠ° с Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌ списком, чСкбоксами, Ρ€Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ, ΠΏΠΎΠ»Π΅ΠΌ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° Ρ€Π΅Π·ΡŽΠΌΠ΅ ΠΈ ΠΊΠ°ΠΏΡ‡Π΅ΠΉ. Основная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ:

  • ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ – всС поля Π°Π½ΠΊΠ΅Ρ‚Ρ‹ выводятся ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‡Ρ‚ΠΎ прСдставляСт собой ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка, Ρ€Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈ чСкбоксов.
  • ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Π°Ρ ΠΊΠ°ΠΏΡ‡Π° ΠΈ Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы.
  • АвтоматичСская ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„Π°ΠΉΠ» Ρ€Π΅Π·ΡŽΠΌΠ΅) Π½Π° Π½ΡƒΠΆΠ½Ρ‹ΠΉ email.

МодСли

Π’Ρ€ΠΈ поля Π² Ρ„ΠΎΡ€ΠΌΠ΅ – «Вакансия», Β«Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚Ρ‹Β» ΠΈ Β«ΠšΠΎΠΌΠΌΠ΅Ρ€Ρ‡Π΅ΡΠΊΠΈΠΉ ΠΎΠΏΡ‹Ρ‚Β» – ΠΈΠΌΠ΅ΡŽΡ‚ список Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ².

1. Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько, ΠΈΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ – для хранСния мноТСствСнных ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² Π² Π±Π°Π·Π΅ ΠΈ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄Π° Π² Π²ΠΈΠ΄Π΅ чСкбоксов принято ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ ΠΈ связь ManyToManyField:

2. Вакансии выводятся Π² Π²ΠΈΠ΄Π΅ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ списка. Π’ Π‘Π” Ρ‚Π°ΠΊΠΈΠ΅ записи хранят Π² Π²ΠΈΠ΄Π΅ choices, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ:

3. ΠšΠΎΠΌΠΌΠ΅Ρ€Ρ‡Π΅ΡΠΊΠΈΠΉ ΠΎΠΏΡ‹Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΎΡ‚Π²Π΅Ρ‚Π° – Π»ΠΈΠ±ΠΎ ΠΎΠ½ Π΅ΡΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ Π½Π΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для хранСния этих choices ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ BooleanField:

4. Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° Ρ€Π΅Π·ΡŽΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ»Π΅ FileField. Django автоматичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ media:

5. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎ сСбС модСль Application, Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π° Π² email'e:

Π€ΠΎΡ€ΠΌΠ°

Π’ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ всС поля ΠΌΠΎΠ΄Π΅Π»ΠΈ Application, плюс добавляСм ΠΏΠΎΠ»Π΅ для ΠΊΠ°ΠΏΡ‡ΠΈ (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΊΠ°ΠΏΡ‡Π΅ Π½ΠΈΠΆΠ΅). Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ опрСдСляСм минимальноС ΠΈ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для поля «Возраст», Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ встроСнный Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ FileExtensionValidator для опрСдСлСния допустимых Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π° Ρ€Π΅Π·ΡŽΠΌΠ΅:

Π’ классС Meta опрСдСляСм Ρ‚ΠΈΠΏ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² ΠΈ устанавливаСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ empty_label для Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка. Если Ρ‚Π°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΏΠΎΠ»Π΅ списка Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ ΠΏΡƒΠ½ΠΊΡ‚ΠΈΡ€ --------.

Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ тСкста плСйсхолдСров, стиля form control ΠΈ установлСния высоты тСкстовых ΠΏΠΎΠ»Π΅ΠΉ пСрСопрСдСляСм значСния Π½ΡƒΠΆΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²:

ΠœΠ΅Ρ‚ΠΎΠ΄ get_message ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹, Π° send отсылаСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„Π°ΠΉΠ» Ρ€Π΅Π·ΡŽΠΌΠ΅) Π½Π° Π½ΡƒΠΆΠ½Ρ‹ΠΉ email (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ настройках ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ сСрвСра Π½ΠΈΠΆΠ΅):

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡ

Π—Π° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ Ρ„ΠΎΡ€ΠΌΡ‹, сохранСниС Π΄Π°Π½Π½Ρ‹Ρ… Π² Π‘Π” ΠΈ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° email ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ прСдставлСниС ApplicationView:

Ѐункция refresh_captcha (совмСстно со скриптом captcha.js) ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΏΡ‡ΠΈ:

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ SuccessView Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ сохранСнии Π΄Π°Π½Π½Ρ‹Ρ…:

   ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ SuccessView Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ сохранСнии Π΄Π°Π½Π½Ρ‹Ρ…
ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ SuccessView Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ сохранСнии Π΄Π°Π½Π½Ρ‹Ρ…

Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΏΡ‡Ρƒ Π² Django-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ

Π‘Π°ΠΌΡ‹Π΅ популярныС сСрвисы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΏΡ‡ΠΈ – Google reCaptcha ΠΈ hCaptcha. Π’ 2022 Π³ΠΎΠ΄Ρƒ появился сСрвис Yandex SmartCaptcha. Π£ ΠΊΠ°ΠΏΡ‡ΠΈ ЯндСкса Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ прСимущСство – ΠΎΠ½Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° российских сайтах. Но, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с reCaptcha ΠΈ hCaptcha, настройки SmartCaptcha Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС, Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΠ± Π΅Π΅ использовании Π½Π° сайтС.

Π›ΡƒΡ‡ΡˆΠ°Ρ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΠΊΠ°ΠΏΡ‡Π΅, которая сохраняСт ΠΈ ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ – автономная ΠΊΠ°ΠΏΡ‡Π°. Вакая ΠΊΠ°ΠΏΡ‡Π° устанавливаСтся прямо Π² Django-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ занимаСтся сбором Π΄Π°Π½Π½Ρ‹Ρ… – просто ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ввСсти ΠΊΠΎΠ΄ с ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. Бамая удобная ΠΈ гибкая ΠΊΠ°ΠΏΡ‡Π° для Django – django-simple-captcha.

Установка ΠΈ кастомизация django-simple-captcha

ΠœΠΎΠ΄ΡƒΠ»ΡŒ устанавливаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

Π’Π°ΠΆΠ½ΠΎ!

ПослС установки django-simple-captcha Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ Π‘Π”: python manage.py migrate, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ path('captcha/', include('captcha.urls')) Π² config/urls.py.

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΈ Ρ‚ΠΈΠΏ Π·Π°Π΄Π°Ρ‡ ΠΊΠ°ΠΏΡ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. ВсС настройки ΠΊΠ°ΠΏΡ‡ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ Π² settings.py. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°ΠΏΡ‡Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge' ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ случайныС символы:

   По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°ΠΏΡ‡Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ случайныС символы
По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°ΠΏΡ‡Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ случайныС символы

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ случайныС слова ΠΈΠ· словаря: CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.word_challenge'

Или ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ простыС Π·Π°Π΄Π°Ρ‡ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge' :

-4

Π’ django-simple-captcha настраиваСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всС: количСство ΠΈ Ρ†Π²Π΅Ρ‚ символов, ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΡˆΡƒΠΌΠ° ΠΈ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ искаТСния. ВмСсто тСкстовой ΠΊΠ°ΠΏΡ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π°ΡƒΠ΄ΠΈΠΎ. Π’ нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ случайныС русскоязычныС слова ΠΈΠ· Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ списка. НСобходимыС настройки Π² settings.py выглядят Ρ‚Π°ΠΊ:

ОбновлСниС ΠΊΠ°ΠΏΡ‡ΠΈ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы

ΠšΠ°ΠΏΡ‡Π° получаСтся забористой – хотя Π² Π½Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ русскоязычныС слова, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ слоТно ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Настройки читаСмости ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ Π½Π΅ слСдуСт – Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΏΡ‡Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ слоТности для Π±ΠΎΡ‚ΠΎΠ². Но для Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ обновлСния ΠΊΠ°ΠΏΡ‡ΠΈ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. Π—Π° эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΡƒΠΆΠ΅ упомянутого прСдставлСния refresh_captcha, ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ скрипт captcha.js, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ Π² шаблонС base.html, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ path('captcha/refresh/', refresh_captcha, name='refresh_captcha') ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° с id="refresh-captcha".

Как ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ email ΠΈΠ· Django-прилоТСния

Для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠΌΠ΅ΠΉΠ»ΠΎΠ² ΠΈΠ· Django Π½Π°Π΄ΠΎ Π»ΠΈΠ±ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ собствСнный ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвСр (это довольно слоТно), Π»ΠΈΠ±ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π»ΡŽΠ±Ρ‹ΠΌ сторонним сСрвисом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт доступ ΠΊ SMTP для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΎΠΉ доступ прСдоставляСт, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ЯндСкс.

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для прилоТСния

Π£Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠΌΠ΅ΠΉΠ»ΠΎΠ² ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌΡƒ сСрвСру, Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ.

НаТмитС Π½Π° ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΊΡƒ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ВсС настройки:

   Настройка ΠΏΠΎΡ‡Ρ‚Ρ‹: всС настройки
Настройка ΠΏΠΎΡ‡Ρ‚Ρ‹: всС настройки

Π’ настройках Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° ΠŸΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ IMAP:

   Настройка ΠΏΠΎΡ‡Ρ‚Ρ‹: ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, IMAP
Настройка ΠΏΠΎΡ‡Ρ‚Ρ‹: ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, IMAP

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠŸΠ°Ρ€ΠΎΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π·Π°Ρ‚Π΅ΠΌ Π² Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ:

   Настройки ΠΏΠΎΡ‡Ρ‚Ρ‹: ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
Настройки ΠΏΠΎΡ‡Ρ‚Ρ‹: ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

И Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠŸΠ°Ρ€ΠΎΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ создайтС ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для ΠΏΠΎΡ‡Ρ‚Ρ‹:

   Настройка ΠΏΠΎΡ‡Ρ‚Ρ‹
Настройка ΠΏΠΎΡ‡Ρ‚Ρ‹

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ настройки Π² settings.py:

  • RECIPIENT_ADDRESS = 'admin@gmail.com' – это адрСс, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСния. АдрСсов ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько, Π² Π²ΠΈΠ΄Π΅ списка.
  • EMAIL_HOST = 'smtp.yandex.ru'
  • EMAIL_PORT = 465
  • EMAIL_USE_SSL = True
  • DEFAULT_FROM_EMAIL = 'sender@yandex.ru' – адрСс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ Π² ΠΏΠΎΠ»Π΅ "ΠΎΡ‚ ΠΊΠΎΠ³ΠΎ".
  • EMAIL_HOST_USER = 'yandex_user@yandex.ru' – адрСс, Π² ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ создали ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для прилоТСния.
  • EMAIL_HOST_PASSWORD = 'yourownpasswordhere' – Ρ‚ΠΎΡ‚ самый ΠΏΠ°Ρ€ΠΎΠ»ΡŒ прилоТСния.
  • EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

Π­Ρ‚ΠΈ настройки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ EmailMessage ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ send Π² Ρ„ΠΎΡ€ΠΌΠ΅ ApplicationForm. Письма Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ€Π΅Π·ΡŽΠΌΠ΅:

   ΠŸΡ€ΠΈΠΌΠ΅Ρ€ письма с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ€Π΅Π·ΡŽΠΌΠ΅
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ письма с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ€Π΅Π·ΡŽΠΌΠ΅

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Ρ„ΠΎΡ€ΠΌΡ‹

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 3 шаблона:

ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Ρ„ΠΎΡ€ΠΌΡ‹ происходит application.html. Для Π²Ρ‹Π²ΠΎΠ΄Π° чСкбоксов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†ΠΈΠΊΠ» ΠΈ счСтчик forloop.counter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подсчитываСт ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ:

ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ±Π° значСния ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°:

ΠŸΡ€ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС value, Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π² качСствС label:

ПодвСдСм ΠΈΡ‚ΠΎΠ³ΠΈ

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ:

  • ΠšΠ°ΡΡ‚ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΏΡ‡Ρƒ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы.
  • Π Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ слоТныС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… HTML/CSS стилСй.
  • ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Django-Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° ΠΈΠΌΠ΅ΠΉΠ» – Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ подписку Π½Π° вакансии, новости ΠΈ Ρ‚.ΠΏ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с шаблонами. Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ для этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° – Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

***

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ курса