Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² html: Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ HTML-ΠΊΠ½ΠΎΠΏΠΊΡƒ Π½Π° сайт

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Webim Π² E-mail

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π²Π½Π΅Π΄Ρ€ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ сСрвиса Webim Π² Π’Π°ΡˆΠ΅ сообщСниС элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° HTML. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ письма смоТСт ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ‡Π°Ρ‚Ρƒ с Π’Π°ΡˆΠΈΠΌ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚ΠΎΠΌ.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ изобраТСния ΠΊΠ½ΠΎΠΏΠΊΠΈ Webim

Для получСния изобраТСния ΠΊΠ½ΠΎΠΏΠΊΠΈ Webim Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ запрос ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°:

https://{account_name}.webim.ru/webim/button.php?button-name=baloon_blue.gif&force-status=on

Π“Π΄Π΅ account_name β€” Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π’Π°ΡˆΠ΅Π³ΠΎ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Webim.

Если Π’Π°Ρˆ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½ Π½Π΅ Π½Π° сСрвСрах Webim, запрос Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:

https://chat.mycompany.com/webim/button.php?button-name=baloon_blue.gif&force-status=on

ОписаниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² запроса /webim/button.php:

НазваниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
button-nameИмя изобраТСния ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ загруТаСтся с сСрвСра Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ открытия сообщСния Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅.
force-statusΠžΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° статус ΠΊΠ½ΠΎΠΏΠΊΠΈ. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° 'force-status=on', Ρ‚ΠΎ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ° статуса Онлайн. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° 'force-status=off', Ρ‚ΠΎ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ° статуса ΠžΡ„Π»Π°ΠΉΠ½. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, статус ΠΊΠ½ΠΎΠΏΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ наличия ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Онлайн:
  • Если Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ открытия письма Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ Π² сСти Π±Ρ‹Π»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ со статусом
Онлайн, Ρ‚ΠΎ отобразится ΠΊΠ½ΠΎΠΏΠΊΠ° со статусом Онлайн.
  • Если Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ открытия письма Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ Π² сСти Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°
  • Онлайн, Ρ‚ΠΎ отобразится ΠΊΠ½ΠΎΠΏΠΊΠ° со статусом ΠžΡ„Π»Π°ΠΉΠ½*.

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π° статус ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π΅ влияСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ„Π»Π°ΠΉΠ½-ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² настройках ΠΊΠ½ΠΎΠΏΠΊΠΈ. ΠžΡ„Π»Π°ΠΉΠ½-ΠΊΠ½ΠΎΠΏΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ нСзависимо ΠΎΡ‚ значСния этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

    Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ изобраТСния ΠΊΠ½ΠΎΠΏΠΎΠΊ Webim

    Имя изобраТСния ΠΊΠ½ΠΎΠΏΠΊΠΈ Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΊΠ½ΠΎΠΏΠΊΠΈΠ˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ„Π»Π°ΠΉΠ½-ΠΊΠ½ΠΎΠΏΠΊΠΈ
    baloon_mini_blue. gif
    baloon_mini_green.gif
    circle2_blue.gif
    circle2_green.gif
    circle_blue.gif
    circle_green.gif
    square_cyan.gif
    square_green.gif
    oval_blue.gif
    oval_green.gif
    oval_blue_l.gif
    oval_green_l.gif
    oval_blue_r.gif
    oval_green_r.gif
    baloon_blue.gif
    baloon_green. gif
    foval_cyan.gif
    foval_purple.gif

    Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ с использованиСм статичСского изобраТСния, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСскоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, зависящСС ΠΎΡ‚ наличия ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Β«ΠΎΠ½Π»Π°ΠΉΠ½Β».

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Webim для открытия Ρ‡Π°Ρ‚Π° ΠΈΠ· сообщСния элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹

    1. Π’ Π’Π°ΡˆΠ΅ сообщСниС элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° HTML Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

      <a href="https://{account_name}.webim.ru/webim/client.php">
      <img src="https://{account_name}.webim.ru/webim/button.php?button-name=baloon_blue.gif&force-status=on" />
      </a>
      

      Π“Π΄Π΅ account_name β€” Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π’Π°ΡˆΠ΅Π³ΠΎ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Webim.

      ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сообщСния:

      <h2>ΠœΠΎΡ‘ письмо Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° HTML</h2><pre>
      Π£ Вас ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ вопросы?
      <a href="https://webim.webim.ru/webim/client.php">
      <img src="https://webim. webim.ru/webim/button.php?button-name=baloon_blue.gif&force-status=on" />
      </a>
      
    2. ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π’Π°ΡˆΠ΅ сообщСниС элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Π°ΠΌ способ.

      ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ сообщСния

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ссылки Π±Π΅Π· использования изобраТСния ΠΊΠ½ΠΎΠΏΠΊΠΈ Webim

    Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ Π’Π°ΠΌ ссылку, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Ρ‡Π°Ρ‚ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚Π° Webim. Для Ρ‚Π°ΠΊΠΎΠΉ ссылки Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ своё ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π›ΠΈΠ±ΠΎ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ ссылку Π½Π° Π’Π°Ρˆ Ρ‡Π°Ρ‚.

    1. Для создания ссылки Π½Π° Ρ‡Π°Ρ‚ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ href Π’Π°ΡˆΠ΅ΠΉ ссылки ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ URL-адрСс, ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊ Π’Π°ΡˆΠ΅ΠΌΡƒ Ρ‡Π°Ρ‚Ρƒ:

      https://{account_name}.webim.ru/webim/client.php
      

      Π“Π΄Π΅ account_name β€” Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π’Π°ΡˆΠ΅Π³ΠΎ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Webim.

      Если Π’Π°Ρˆ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½ Π½Π΅ Π½Π° сСрвСрах Webim, ссылка Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:

      https://chat.mycompany. com/webim/client.php
      

      ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сообщСния элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° HTML с использованиСм тСкстовой ссылки:

      <h2>ΠœΠΎΡ‘ письмо Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° HTML</h2><pre>
      Π£ Вас ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ вопросы?
      <a href="https://webim.webim.ru/webim/client.php">
      ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π½Π°ΠΌ!
      </a>
      
    2. ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π’Π°ΡˆΠ΅ сообщСниС элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Π°ΠΌ способ.

      ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ сообщСния

    Π’Π°ΠΆΠ½ΠΎ

    ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΏΠΎ ссылкС Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Ρ‡Π°Ρ‚ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚Π° Webim Π½Π° вСсь экран.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‡Π°Ρ‚Π°, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ послС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΏΠΎ ссылкС

    Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ‡Π°Ρ‚Ρƒ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚Π° Webim прямо ΠΈΠ· письма!

    Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² Django Admin

    Spread the love

    Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Β«ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ΅Β» рассмотрСно Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΊΠ½ΠΎΠΏΠΎΠΊ Π² интСрфСйс Django Admin. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части рассказано ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π½Π° страницу списка Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ β€” list view. НапримСр ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Ρ‡Π΅Π³ΠΎ Π»ΠΈΠ±ΠΎ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части рассказано ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ дСйствий (actions) для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ записи ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ.


    ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² списочный интСрфСйс ΠΊΠ°ΠΊΠΎΠΉ Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…. По наТатия Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ….

    Для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ внСсти измСнСния Π² Ρ„Π°ΠΉΠ» admin.py ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаблон Π°Π΄ΠΌΠΈΠ½ΠΊΠΈ для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

    НачнСм с Ρ„Π°ΠΉΠ»Π° шаблона. Наш шаблон Π±ΡƒΠ΄Π΅Ρ‚ основан Π½Π° стандартном шаблонС, ΠΌΡ‹ просто внСсСм Π² Π½Π΅Π³ΠΎ нСбольшоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. Π’ ΠΏΠ°ΠΏΠΊΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прилоТСния Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ: xxx/templates/admin/model_change_list.html.

    Π’ этот шаблон Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния.

    {% extends 'admin/change_list. html' %}
    {% block object-tools %}
      <form action="import/" method="POST">
        {% csrf_token %}
        <input type="submit" value="Π˜ΠΌΠΏΠΎΡ€Ρ‚" />
      </form>
        {{ block.super }}
    {% endblock %}

    Π’ Ρ„Π°ΠΉΠ»Π΅ admin.py Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° Ρ„Π°ΠΉΠ» этот шаблон. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для рСгистрации Π½ΠΎΠ²ΠΎΠ³ΠΎ URL get_urls. Π’ Π½Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. И Π΄Π°Π»Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ саму Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°:

    from django.contrib import admin
    from django.http import HttpResponseRedirect
    from django.conf.urls import url
    from monitor.models import LoginMonitor
    from monitor.import_custom import ImportCustom
    @admin.register(LoginMonitor)<br>
    class LoginMonitorAdmin(admin.ModelAdmin):<br>
        change_list_template = "admin/monitor_change_list.html"
        def get_urls(self):
            urls = super(LoginMonitorAdmin, self).
    import/$', self.process_import, name='process_import'),] return custom_urls + urls def process_import_btmp(self, request): import_custom = ImportCustom() count = import_custom.import_data() self.message_user(request, f"создано {count} Π½ΠΎΠ²Ρ‹Ρ… записСй") return HttpResponseRedirect("../")

    ВсС, для Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ этого достаточно.


    Π”Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ старой, Π½ΠΎ всС Π΅Ρ‰Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ: Haki Benita β€” How to Add Custom Action Buttons to Django Admin


    Π’ послСднСм постС ΠΌΡ‹ прСдставили шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² Π½Π°ΡˆΠΈΡ… модСлях Django. ΠœΡ‹ использовали ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ банковского счСта с модСлями Action ΠΈ Action, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°. Π£ банковского счСта Π±Ρ‹Π»ΠΎ Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² интСрфСйсС администратора β€”

    deposit (добавлСния Π½Π° счСт) ΠΈ withdraw (снятиС со счСта).

    ΠœΡ‹ собираСмся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² интСрфСйсС администратора Django для Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π΅Π½Π΅Π³ со счСта, ΠΈ ΠΌΡ‹ сдСлаСм это ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ Π·Π° 100 строк ΠΊΠΎΠ΄Π°!

    Как это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅?

    Django Admin interface with custom action buttons
    Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: https://hakibenita. com/images/01-how-to-add-custom-action-buttons-to-django-admin.png

    ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ action Π² интСрфСйсС администратора?

    ВстроСнныС action Π² интСрфСйса администратора Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ запросов queryset. Они скрыты Π² Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΌ мСню Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов ΠΈ Π² основном ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для выполнСния массовых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ являСтся дСйствиС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚Π΅ нСсколько строк ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ Β«ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ строки» ΠΈΠ· Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ мСню. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ быстро ΠΈ Π½Π΅ всСгда ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаСв использования.

    Django built in actions
    Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: https://hakibenita.com/images/02-how-to-add-custom-action-buttons-to-django-admin.png

    Π”Ρ€ΡƒΠ³ΠΈΠΌ нСдостатком являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ дСйствия Π½Π΅ доступны Π² detail view. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π²ΠΈΠ΄, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ шаблон.

    Π€ΠΎΡ€ΠΌΡ‹

    ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для выполнСния дСйствия. ЕстСствСнно для этого, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° Ρ„ΠΎΡ€ΠΌΠ°. Нам Π½ΡƒΠΆΠ½Π° ΠΎΠ΄Π½Π° Ρ„ΠΎΡ€ΠΌΠ° для deposit ΠΈ ΠΎΠ΄Π½Π° Ρ„ΠΎΡ€ΠΌΠ° для withdraw.

    Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ дСйствия ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠΏΡ†ΠΈΡŽ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Ρƒ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, сообщая Π΅ΠΌΡƒ ΠΎ дСйствии, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΌ Π² Π΅Π³ΠΎ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи.

    ВсС наши actions ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ comment ΠΈ send_email. Actions Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ успСх ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

    Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±Ρ‰Π΅Π³ΠΎ action:

    # forms.py
    from django import forms
    from common.utils import send_email
    from . import errors
    class AccountActionForm(forms.Form):
        comment = forms.CharField(
            required=False,
            widget=forms.Textarea,
        )
        send_email = forms. BooleanField(
            required=False,
        )
        @property
        def email_subject_template(self):
            return 'email/account/notification_subject.txt'
        @property
        def email_body_template(self):
            raise NotImplementedError()
        def form_action(self, account, user):
            raise NotImplementedError()
        def save(self, account, user):
            try:
                account, action = self.form_action(account, user)
            except errors.Error as e:
                error_message = str(e)
                self.add_error(None, error_message)
                raise
            if self.cleaned_data.get('send_email', False):
                send_email(
                    to=[account.user.email],
                    subject_template=self.email_subject_template,
                    body_template=self.email_body_template,
                    context={
                        "account": account,
                        "action": action,
                    }
                )
        return account, action
    ο»Ώ
    • КаТдоС action ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ comment ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅, Ссли дСйствиС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.
    • ЀактичСская опСрация выполняСтся ΠΏΡ€ΠΈ сохранСнии Ρ„ΠΎΡ€ΠΌΡ‹. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ModelForm.
    • Π’ цСлях вСдСния ΠΆΡƒΡ€Π½Π°Π»Π° ΠΈ Π°ΡƒΠ΄ΠΈΡ‚Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ сторона Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎ action.
    • ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ, Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ NotImplementedError. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ сообщСниС ΠΎΠ± ошибкС, Ссли ΠΎΠ½ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
    • Ошибки ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Наши ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ошибок, поэтому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ всС (ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ) ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, связанныС с Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠΌ, ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΡ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ простой Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΡƒ для withdraw. Для withdraw Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ суммы:

    # forms. py
    from django.utils import timezone
    from .models import Account, Action
    class WithdrawForm(AccountActionForm):
        amount = forms.IntegerField(
            min_value=Account.MIN_WITHDRAW,
            max_value=Account.MAX_WITHDRAW,
            required=True,
            help_text='How much to withdraw?',
        )
        email_body_template = 'email/account/withdraw.txt'
        field_order = (
            'amount',
            'comment',
            'send_email',
        )
        def form_action(self, account, user):
            return Account.withdraw(
                id=account.pk,
                user=account.user,
                amount=self.cleaned_data['amount'],
                withdrawn_by=user,
                comment=self.cleaned_data['comment'],
                asof=timezone.now(),
            )
    ο»Ώ
    • ΠœΡ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ»ΠΈ Π±Π°Π·Ρƒ AccountActionForm ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ amount с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ.
    • ΠœΡ‹ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, email_body_template.
    • ΠœΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ action Ρ„ΠΎΡ€ΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ classmethod ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ поста. МодСль заботится ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ записи, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π»ΡŽΠ±Ρ‹Ρ… вычисляСмых ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… дСйствий Π² ΠΆΡƒΡ€Π½Π°Π».

    Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом являСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ deposit. Для deposit Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ поля amount, reference ΠΈ reference_type:

    # forms.py
    class DepositForm(AccountActionForm):
        amount = forms.IntegerField(
            min_value=Account.MIN_DEPOSIT,
            max_value=Account.MAX_DEPOSIT,
            required=True,
            help_text='How much to deposit?',
        )
        reference_type = forms.ChoiceField(
            required=True,
            choices=Action.REFERENCE_TYPE_CHOICES,
        )
        reference = forms.CharField(
            required=False,
        )
        email_body_template = 'email/account/deposit.txt'
        field_order = (
            'amount',
            'reference_type',
            'reference',
            'comment',
            'send_email',
        )
        def form_action(self, account, user):
            return Account. deposit(
                id=account.pk,
                user=account.user,
                amount=self.cleaned_data['amount'],
                deposited_by=user,
                reference=self.cleaned_data['reference'],
                reference_type=self.cleaned_data['reference_type'],
                comment=self.cleaned_data['comment'],
                asof=timezone.now(),
            )
    ο»Ώ

    На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ для принятия, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ оформлСния deposit ΠΈ withdraw. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом являСтся Π΅Π³ΠΎ интСграция Π² прСдставлСниС списка администратора Django.


    Admin

    ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ смоТСм Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ для actions, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΡƒΡŽ страницу администратора для нашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ Account:

    # admin.py
    from django.contrib import admin
    from . models import Account
    @admin.register(Account)
    class AccountAdmin(admin.ModelAdmin):
        date_heirarchy = (
            'modified',
        )
        list_display = (
            'id',
            'user',
            'modified',
            'balance',
            'account_actions',
        )
        readonly_fields = (
            'id',
            'user',
            'modified',
            'balance',
            'account_actions',
        )
        list_select_related = (
            'user',
        )
        def account_actions(self, obj):
            # TODO: Render action buttons
    ο»Ώ

    ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ просмотр списка Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ссылку Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ actions ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько ΠΏΠΎΠ»Π΅ΠΉ поиска ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π Π°Π½Π΅Π΅ я писал ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² интСрфСйсС администратора ΠΏΡ€ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ прилоТСния Django для сотСн тысяч ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’Π°ΠΌ Π΅ΡΡ‚ΡŒ нСсколько приятных Ρ‚Ρ€ΡŽΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ этот простой Π²ΠΈΠ΄ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ приятнСС.

    Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΎΠΊ Action

    ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ action для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΡΡΡ‹Π»Π°Π»ΠΈΡΡŒ Π½Π° страницу с Ρ„ΠΎΡ€ΠΌΠΎΠΉ. (?P<account_id>.+)/withdraw/$’, self.admin_site.admin_view(self.process_withdraw), name=’account-withdraw’, ), ] return custom_urls + urls def account_actions(self, obj): return format_html( ‘<a href=»{}»>Deposit</a>Β ‘ ‘<a href=»{}»>Withdraw</a>’, reverse(‘admin:account-deposit’, args=[obj.pk]), reverse(‘admin:account-withdraw’, args=[obj.pk]), ) account_actions.short_description = ‘Account Actions’ account_actions.allow_tags = True def process_deposit(self): # TODO def process_withdraw(self): # TODO ο»Ώ

    1. ΠœΡ‹ зарСгистрировали Π΄Π²Π° URL, ΠΎΠ΄ΠΈΠ½ для deposit ΠΈ ΠΎΠ΄ΠΈΠ½ для withdraw.
    2. ΠœΡ‹ сослались Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ process_deposit ΠΈ process_withdraw. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ отобразят ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ страницу с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΈ выполнят ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ.
    3. ΠœΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ настраиваСмоС ΠΏΠΎΠ»Π΅ account_actions, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ дСйствия. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ использования Β«ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎΒ» поля администратора, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ account_actions, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ доступно ΠΊΠ°ΠΊ Π² подробностях (detail view), Ρ‚Π°ΠΊ ΠΈ Π² Π²ΠΈΠ΄Π΅ списка (list view).

    Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ actions:

    # admin.py
    from django.http import HttpResponseRedirect
    from django.template.response import TemplateResponse
    from .forms import DepositForm, WithdrawForm
    class AccountAdmin(admin.ModelAdmin):
       # ...
       def process_deposit(self, request, account_id, *args, **kwargs):
            return self.process_action(
                request=request,
                account_id=account_id,
                action_form=DepositForm,
                action_title='Deposit',
            )
       def process_withdraw(self, request, account_id, *args, **kwargs):
            return self. process_action(
                request=request,
                account_id=account_id,
                action_form=WithdrawForm,
                action_title='Withdraw',
            )
       def process_action(
            self,
            request,
            account_id,
            action_form,
            action_title
       ):
            account = self.get_object(request, account_id)
            if request.method != 'POST':
                form = action_form()
            else:
                form = action_form(request.POST)
                if form.is_valid():
                    try:
                        form.save(account, request.user)
                    except errors.Error as e:
                        # If save() raised, the form will a have a non
                        # field error containing an informative message.
                        pass
                    else:
                        self.message_user(request, 'Success')
                        url = reverse(
                            'admin:account_account_change',
                           args=[account.pk],
                            current_app=self. admin_site.name,
                        )
                        return HttpResponseRedirect(url)
            context = self.admin_site.each_context(request)
            context['opts'] = self.model._meta
            context['form'] = form
            context['account'] = account
            context['title'] = action_title
            return TemplateResponse(
                request,
                'admin/account/account_action.html',
                context,
            )
    ο»Ώ

    Deposit ΠΈ withdraw ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±Π° дСйствия, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ страницС ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Ρ„ΠΎΡ€ΠΌΡƒ.

    process_action ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ Ρ„ΠΎΡ€ΠΌΡ‹ для ΠΎΠ±ΠΎΠΈΡ… дСйствий. Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ дСйствия ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи. process_withdraw ΠΈ process_deposit, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для установки ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ контСкста для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

    Для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ процСсса Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ template для ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ страницы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Ρ„ΠΎΡ€ΠΌΡƒ дСйствия. ΠœΡ‹ собираСмся ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ наш шаблон Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ шаблонС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌ Django Admin:

    <!-- templates/admin/account/account_action.html -->
    {% extends "admin/change_form.html" %}
    {% load i18n admin_static admin_modify %}
    {% block content %}
    <div>
      <form action="" method="POST">
        {% csrf_token %}
        {% if form.non_field_errors|length > 0 %}
          <p>
              "Please correct the errors below."
          </p>
          {{ form.non_field_errors }}
        {% endif %}
        <fieldset>
          {% for field in form %}
            <div>
              {{ field.errors }}
              {{ field.label_tag }}
              {{ field }}
              {% if field.field.help_text %}
              <p>
                {{ field.field.help_text|safe }}
              </p>
              {% endif %}
            </div>
          {% endfor %}
        </fieldset>
        <div>
          <input type="submit" value="Submit">
        </div>
      </form>
    </div>
    {% endblock %}
    ο»Ώ

    И это всС!

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ наши сотрудники ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Π³ΠΊΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ ΠΈ ΡΠ½ΠΈΠΌΠ°Ρ‚ΡŒ срСдства прямо ΠΈΠ· интСрфСйса администратора. НС Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΡƒΡŽ панСль инструмСнтов.

    Π― ΠΎΠ±Π΅Ρ‰Π°Π», Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сдСлаСм это Π² 100 строк, ΠΈ ΠΌΡ‹ сдСлали это Π·Π° мСньшС количСство!


    Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

    Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ взята ΠΈΠ· прСвосходного (прСвосходного!) ΠŸΠ°ΠΊΠ΅Ρ‚Π° django-import-export. Π­Ρ‚ΠΎ сэкономило Π½Π°ΠΌ часы Β«Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ½Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Excel?Β» ΠΈ ΠΌΡ‹ любим это Π·Π° это. Если Π²Ρ‹ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с этим, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ это.

    Π‘Ρ‹Π»Π° Π»ΠΈ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Π° эта ΡΡ‚Π°Ρ‚ΡŒΡ?

    [8 / 1.9]


    Spread the love

    Кнопка

    HTML: пошаговоС руководство | Career Karma

    HTML-Ρ‚Π΅Π³ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² HTML-Ρ„ΠΎΡ€ΠΌΠ΅. Он позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π½Π° Π²Π΅Π±-сайт. Π‘Ρ‚ΠΈΠ»ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CSS.


    Когда Π²Ρ‹ создаСтС Ρ„ΠΎΡ€ΠΌΡƒ Π½Π° Π²Π΅Π±-страницС, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ. НапримСр, Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ° Π·Π°ΠΊΠ°Π·Π° Π½Π° сайтС элСктронной ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ†ΠΈΠΈ, которая собираСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ доставкС ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ» Ρ„ΠΎΡ€ΠΌΡ‹, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠ°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΆΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свою ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

    НайдитС подходящий ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΉ Π»Π°Π³Π΅Ρ€ΡŒ

    • Career Karma ΠΏΠΎΠ΄Π±Π΅Ρ€Π΅Ρ‚ для вас Π»ΡƒΡ‡ΡˆΠΈΠ΅ тСхнологичСскиС ΡƒΡ‡Π΅Π±Π½Ρ‹Π΅ курсы
    • Доступ ΠΊ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹ΠΌ стипСндиям ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ курсам

    Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΉ вас вопрос
    Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡΠ”ΠΈΠ·Π°ΠΉΠ½ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ· данныхАналитика Π΄Π°Π½Π½Ρ‹Ρ…UX-Π΄ΠΈΠ·Π°ΠΉΠ½ΠšΠΈΠ±Π΅Ρ€Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΠ˜ΠΌΡ

    Ѐамилия

    ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π°

    НомСр Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°

    ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ, Π²Ρ‹ ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚Π΅ΡΡŒ с нашими Условиями обслуТивания ΠΈ ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ прСдлоТСния ΠΈ возмоТности ΠΎΡ‚ Career Karma ΠΏΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρƒ, тСкстовым сообщСниям ΠΈ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅.

    Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚-Ρ‚ΠΎ ΠΈ появляСтся Ρ‚Π΅Π³ HTML

    Π’ΠΎΡ‚ ΠΊΠ°ΠΊ наша ΠΊΠ½ΠΎΠΏΠΊΠ° выглядит Π½Π° Π²Π΅Π±-страница:

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π° нашСй Π²Π΅Π±-страницС, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смоТСт ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π²Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ.

    Π’Π΅Π³

    ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ

    Атрибут disabled ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с элСмСнтом. Π’ΠΎΡ‚ синтаксис Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° disabled :

      

    Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½ΠΈΠΆΠ΅, наша ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Π° ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚Π°:

    Π€ΠΎΡ€ΠΌΠ°

    Атрибут Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для привязки элСмСнта ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΊ Ρ„ΠΎΡ€ΠΌΠ΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Ρ„ΠΎΡ€ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎ id Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ относится Ρ„ΠΎΡ€ΠΌΠ°. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Ρ„ΠΎΡ€ΠΌΡ‹, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ с нашСй Ρ„ΠΎΡ€ΠΌΠΎΠΉ pizza :

     
    Вкус:

    Атрибут Ρ„ΠΎΡ€ΠΌΡ‹ связал Π½Π°ΡˆΡƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ с Ρ„ΠΎΡ€ΠΌΠΎΠΉ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° pizza . Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π°ΠΆΠΌΠ΅ΠΌ Π½Π°ΡˆΡƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π° β€‹β€‹β€‹β€‹Π½Π°ΡˆΠ° Ρ„ΠΎΡ€ΠΌΠ° с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ pizza .

    Formaction

    formaction ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ URL-адрСс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ. Π­Ρ‚ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ type Π² вашСй ΠΊΠ½ΠΎΠΏΠΊΠ΅ Ρ€Π°Π²Π΅Π½ submit .

    Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° formaction :

      

    Formenctype

    Атрибут formenctype опрСдСляСт способ кодирования Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΈΡ… ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π½Π° сСрвСр. Π­Ρ‚ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Β« method=’post’ Β» Π² вашСй Ρ„ΠΎΡ€ΠΌΠ΅.

    Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° formenctype для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ простого тСкста Π½Π° сСрвСр ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ нашСй ΠΊΠ½ΠΎΠΏΠΊΠΈ:

      

    Π€ΠΎΡ€ΠΌΠΌΠ΅Ρ‚ΠΎΠ΄

    formmethod ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для указания ΠΌΠ΅Ρ‚ΠΎΠ΄Π° HTTP , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. Π­Ρ‚ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ Β« type=’submit’ Β».

    Π”Π²Π° допустимых значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° formmethod : ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ послС . Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ HTTP GET , Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ get ; Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ HTTP POST , Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ post .

    Π’ΠΎΡ‚ синтаксис Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° formmethod :

    Β«ΠšΠ°Ρ€ΡŒΠ΅Ρ€Π° ΠšΠ°Ρ€ΠΌΠ° вошла Π² мою Тизнь, ΠΊΠΎΠ³Π΄Π° я большС всСго Π² Π½Π΅ΠΉ Π½ΡƒΠΆΠ΄Π°Π»Π°ΡΡŒ, ΠΈ быстро ΠΏΠΎΠΌΠΎΠ³Π»Π° ΠΌΠ½Π΅ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π±ΡƒΡ‚ΠΊΠ΅ΠΌΠΏ. Π§Π΅Ρ€Π΅Π· Π΄Π²Π° мСсяца послС выпуска я нашСл Ρ€Π°Π±ΠΎΡ‚Ρƒ своСй ΠΌΠ΅Ρ‡Ρ‚Ρ‹, которая соотвСтствовала ΠΌΠΎΠΈΠΌ цСнностям ΠΈ Ρ†Π΅Π»ΠΈ Π² ΠΆΠΈΠ·Π½ΠΈ!Β»

    Π’Π΅Π½Π΅Ρ€Π°, ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€-программист Rockbot

      

    Formnovalidate

    formnovalidate ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для указания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΈΡ… ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²Π²ΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ» всС поля, Π²Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ formnovalidate .

    Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ formnovalidate Π² дСйствии:

      

    Formtarget

    formtarget устанавливаСт Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ располоТСниС для ΠΎΡ‚Π²Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сСрвСр отправляСт послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. ДопустимыС значСния для этого Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°: _blank , _self , _parent , _top ΠΈΠ»ΠΈ имя вашСго uframe.

    Π’ΠΎΡ‚ синтаксис Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° formtarget :

      

    Name

    Π’Π΅Π³ name ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для указания ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ (которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ срСди всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠΌΠ΅Π½ элСмСнтов Ρ„ΠΎΡ€ΠΌΡ‹) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

      

    Type

    Π’Π΅Π³ type опрСдСляСт Ρ‚ΠΈΠΏ ΠΊΠ½ΠΎΠΏΠΊΠΈ. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΊΠ½ΠΎΠΏΠΎΠΊ: ΠΊΠ½ΠΎΠΏΠΊΠ° , ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈ сброс . Π’ΠΎΡ‚ синтаксис для Ρ‚Π΅Π³Π° type :

      

    Value

    Π’Π΅Π³ value ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π’ΠΎΡ‚ синтаксис для value tag:

      

    Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

    Π’Π΅Π³

    Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

    Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *