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

🐍🎸 ΠšΡƒΡ€Ρ Django. Π§Π°ΡΡ‚ΡŒ 3: ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ

Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ создания, кастомного Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΈ кастомной Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌ. ← ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ 2 ΠŸΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ← Π§Π°ΡΡ‚ΡŒ 2 РСгистрация, авторизация, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ доступа Django Ρ„ΠΎΡ€ΠΌΡ‹: основная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠœΠΎΠ΄ΡƒΠ»ΡŒ Forms Π² Django Π±Π΅Ρ€Π΅Ρ‚ Π½Π° сСбя всю ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°. Π’ΠΎΡ‚ Π΅Π³ΠΎ основныС возмоТности: 1. ΠŸΠΎΡ‡Ρ‚ΠΈ автоматичСскоС созданиС Ρ„ΠΎΡ€ΠΌ Π½Π° основС ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. ΠŸΡ€ΠΈ этом Π² Ρ„ΠΎΡ€ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹Π΅ поля ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π° Π½Π΅ всС сразу. 2. Π”Π²Π° основных Ρ‚ΠΈΠΏΠ° Ρ„ΠΎΡ€ΠΌ forms.Form ΠΈ forms.ModelForm – ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ для сохранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π‘Π”. 3. Π’Ρ‹Π²ΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΡ‹ Π² шаблонС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Π³Π° {{ form }}. Π£ Django Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ – Ρ„ΠΎΡ€ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ нСсколькими способами, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ послСдний ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅, прСдоставляСт самыС ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹Π΅ возмоТности для кастомного Π΄ΠΈΠ·Π°ΠΉΠ½Π° Ρ„ΠΎΡ€ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ HTML/CSS: 4. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· HTML ΠΈ AJAX-Ρ„ΠΎΡ€ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅
ОглавлСниС

Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ создания, кастомного Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΈ кастомной Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌ.

← ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ 2

ΠŸΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

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

РСгистрация, авторизация, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ доступа

Django Ρ„ΠΎΡ€ΠΌΡ‹: основная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

ΠœΠΎΠ΄ΡƒΠ»ΡŒ Forms Π² Django Π±Π΅Ρ€Π΅Ρ‚ Π½Π° сСбя всю ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°. Π’ΠΎΡ‚ Π΅Π³ΠΎ основныС возмоТности:

1. ΠŸΠΎΡ‡Ρ‚ΠΈ автоматичСскоС созданиС Ρ„ΠΎΡ€ΠΌ Π½Π° основС ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. ΠŸΡ€ΠΈ этом Π² Ρ„ΠΎΡ€ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹Π΅ поля ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π° Π½Π΅ всС сразу.

2. Π”Π²Π° основных Ρ‚ΠΈΠΏΠ° Ρ„ΠΎΡ€ΠΌ forms.Form ΠΈ forms.ModelForm – ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ для сохранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π‘Π”.

3. Π’Ρ‹Π²ΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΡ‹ Π² шаблонС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Π³Π° {{ form }}. Π£ Django Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ – Ρ„ΠΎΡ€ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ нСсколькими способами, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ послСдний ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅, прСдоставляСт самыС ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹Π΅ возмоТности для кастомного Π΄ΠΈΠ·Π°ΠΉΠ½Π° Ρ„ΠΎΡ€ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ HTML/CSS:

  • ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ {{ form.as_p }}
  • Π² Π²ΠΈΠ΄Π΅ списка {{ form.as_ul }}
  • Π² Ρ„ΠΎΡ€ΠΌΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ {{ form.as_table }}
  • ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ полям {{ form.name_of_field }}

4. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· HTML ΠΈ AJAX-Ρ„ΠΎΡ€ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… исходных ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ:

  • для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹, Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° email.
  • ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„ΠΎΡ€ΠΌ со слоТным Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ.
  • ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с AJAX Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½Π° сСрвСр (ΠΈ приходят с сСрвСра) Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ с использованиСм JavaScript.

5. Валидация ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… с Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ request. Π’ΠΎ view ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ эти Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· request.POST, создаСм экзСмпляр Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Ρ‚ΡƒΠ΄Π° Π΄Π°Π½Π½Ρ‹Π΅, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ is_valid() для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ валидности.

6. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΎΡ‡ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹. ΠžΡ‡ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° clean(), послС Ρ‡Π΅Π³ΠΎ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π° соотвСтствиС Π½ΡƒΠΆΠ½Ρ‹ΠΌ критСриям ΠΈ бСзопасно ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

7. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ошибок Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ. Если Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ критСриям, Django ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π² шаблон ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ статус валидности. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ вывСсти всС ошибки списком, Π»ΠΈΠ±ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ рядом с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ.

🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»

πŸπŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ Python

ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ PythonΒ»

🐍🧩 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Python

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Python для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ PythonΒ»

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌ Π² Django

НачнСм с создания Ρ„ΠΎΡ€ΠΌΡ‹ для получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π² Π‘Π”, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ модСль:

Для хранСния ссылки Π½Π° Ρ„ΠΎΡ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ImageField, поэтому Π² вашСм Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Pillow. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ†Π° Profile появилась Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС поля ΠΌΠΎΠ΄Π΅Π»ΠΈ, поэтому Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ fields Ρ€Π°Π²Π½ΠΎ _all_:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ прСдставлСниС для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ„ΠΎΡ€ΠΌΡ‹:

ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ доступна страница:

И шаблон для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ„ΠΎΡ€ΠΌΡ‹:

ЗапуститС сСрвСр, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ адрСсу http://127.0.0.1:8000/profile/ – Ρ„ΠΎΡ€ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

НСказистый внСшний Π²ΠΈΠ΄ Ρ„ΠΎΡ€ΠΌ, Π²Ρ‹Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚Π΅Π³ΠΎΠ² {{ form }} – СдинствСнный минус Django Forms. Π‘Ρ…Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ связана с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ самых Π±Π°Π·ΠΎΠ²Ρ‹Ρ… HTML-Ρ‚Π΅Π³ΠΎΠ²:

Π’ ΠΈΡ‚ΠΎΠ³Π΅ автоматичСски вывСдСнная Ρ„ΠΎΡ€ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ Π½Π΅ слишком ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ. Π­Ρ‚ΠΎΡ‚ нСдостаток, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ.

Как ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄ΠΈΠ·Π°ΠΉΠ½ Django Ρ„ΠΎΡ€ΠΌ

ΠŸΡ€ΠΈΠ΄Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ внСшний Π²ΠΈΠ΄ ΠΌΠΎΠΆΠ½ΠΎ нСсколькими способами:

  • АвтоматичСски – с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ‚ΠΈΠΏΠ° django-crispy-forms, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΡ‹ стили Bootstrap ΠΈΠ»ΠΈ Tailwind. Π­Ρ‚ΠΎ самый простой, Π½ΠΎ Π½Π΅ самый Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρƒ Π½ΠΎΠ²Ρ‹Ρ… вСрсий django-crispy-forms Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Ρ€Π΅Π»ΠΈΠ·Π°ΠΌΠΈ Django.
  • Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΆΠ΅ упомянутого Π²Ρ‹ΡˆΠ΅ кастомного Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° {{ form.name_of_field }}, ΠΊΠΎΠ³Π΄Π° поля Ρ„ΠΎΡ€ΠΌΡ‹ выводятся Π² шаблонС ΠΎΠ΄Π½ΠΎ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈ ΠΊ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ HTML-Ρ‚Π΅Π³ΠΈ ΠΈ CSS-стили.
  • Π‘ использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° field.widget.attrs.update() Π² forms.py, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ CSS-стили Π² шаблон Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ HTML/CSS Π΄ΠΈΠ·Π°ΠΉΠ½ для Ρ„ΠΎΡ€ΠΌΡ‹ нСпосрСдствСнно Π² шаблонС. Π§Ρ‚ΠΎΠ±Ρ‹ Django ΠΌΠΎΠ³ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, Π² Π½Π΅Π΅ Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ {% csrf_token %}, ΠΊΠ°ΠΊ ΠΈ Π² случаС Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° встроСнных Ρ„ΠΎΡ€ΠΌ Django, Π° Ссли Ρ„ΠΎΡ€ΠΌ Π½Π° страницС нСсколько – ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ прСдставлСния Π² form action:

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ любого ΠΈΠ· этих способов ΠΌΠΎΠΆΠ½ΠΎ привСсти Ρ„ΠΎΡ€ΠΌΡƒ Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄.

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

πŸπŸš€ Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ€Π΅ΠΊΡ€ΡƒΡ‚ΠΈΠ½Π³ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚Π°Π» Π½Π° Django: Ρ‡Π°ΡΡ‚ΡŒ 1

MΠ΅Ρ‚ΠΎΠ΄ field.widget.attrs.update()

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ CSS-стили (кастомныС ΠΈΠ»ΠΈ стандартныС Bootstrap'овскиС) прямо Π² Ρ„ΠΎΡ€ΠΌΡƒ. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Bootstrap-стили Π² шаблон profile.html:

И Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ field.widget.attrs.update() для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ стилСй form-control ΠΈ form-label Π² Ρ„ΠΎΡ€ΠΌΡƒ:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

-2

ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Ρ„ΠΎΡ€ΠΌ

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΠ»Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Π³Π° {{ form.name_of_field }} позволяСт Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Django-Ρ„ΠΎΡ€ΠΌΡƒ Π² Π±ΠΎΠ»Π΅Π΅ слоТный Π΄ΠΈΠ·Π°ΠΉΠ½ – ΠΊΠΎΠ³Π΄Π° Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля свой Π½Π°Π±ΠΎΡ€ стилСй.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ наша Ρ„ΠΎΡ€ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

   ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Ρ„ΠΎΡ€ΠΌ
ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Ρ„ΠΎΡ€ΠΌ

ΠœΠ΅Ρ‚ΠΎΠ΄ field.widget.attrs.update() Π² этом случаС – Π½Π΅ самоС ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Ρƒ этой Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ поля, Π½ΠΎ ΠΈ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ эти поля div'Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ стили:

Π›ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ – ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ использованиС field.widget.attrs.update() для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ стилСй form-control Π² forms.py ΠΈ {{ form.name_of_field }} Π² шаблонС profile.html для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎΠ»Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹

Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π΅ΡΡ‚ΡŒ опрСдСлСнная Π²Ρ‹ΡˆΠ΅ модСль Profile, Ρ„ΠΎΡ€ΠΌΠ° ProfileForm, ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ:

Для сохранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ напишСм прСдставлСниС ProfileFormView, Π° для Π²Ρ‹Π²ΠΎΠ΄Π° сообщСния ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ сохранСнии Π΄Π°Π½Π½Ρ‹Ρ… – прСдставлСниС SuccessView:

Π­Ρ‚ΠΈ прСдставлСния приводятся Π² дСйствиС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°ΠΌΠΈ profile/ ΠΈ success/:

Если с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ΅ всС Π² порядкС, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ сохранСны Π² Π‘Π”, Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° success.html:

-4

Если ΠΆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ» Ρ„ΠΎΡ€ΠΌΡƒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΎΠ½ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ сообщСниС ΠΎΠ± ошибкС Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΠΎΠ»Π΅ Ρ„ΠΎΡ€ΠΌΡ‹:

   Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΠΎΠ»Π΅ Ρ„ΠΎΡ€ΠΌΡ‹
Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΠΎΠ»Π΅ Ρ„ΠΎΡ€ΠΌΡ‹

Π’Π°ΠΆΠ½ΠΎ!

Π§Ρ‚ΠΎΠ±Ρ‹ Django смог ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹, Π² этой Ρ„ΠΎΡ€ΠΌΠ΅ (ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π°) ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ enctype="multipart/form-data".

Π’ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части Ρ„ΠΎΡ€ΠΌΡ‹ Π² шаблонС profile.html ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π²Ρ‹Π²ΠΎΠ΄ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ошибок:

ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Π°Ρ валидация

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ значСния. Django прСдоставляСт нСсколько встроСнных Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ:

  • ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ число ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ;
  • Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π»ΠΈ тСкст ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ;
  • соотвСтствуСт Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» допустимому Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ;
  • являСтся Π»ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΡŽΠ·Π΅Ρ€Π½Π΅ΠΉΠΌ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ Ρ‚.Π΄.

Если встроСнных Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ΠΎΠ² нСдостаточно для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ, всСгда ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой собствСнный. Π‘Π΄Π΅Π»Π°Π΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, кастомный Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ коррСктности ΡŽΠ·Π΅Ρ€Π½Π΅ΠΉΠΌΠ° Π² Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌΠ΅.

Валидация Π½ΠΈΠΊΠ° Π² Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌΠ΅

Имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с @, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ символ _ (Π½ΠΎ Π½Π΅ сразу послС @), ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· латинских Π±ΡƒΠΊΠ² ΠΈ Ρ†ΠΈΡ„Ρ€. Π£Ρ‡Ρ‚Π΅ΠΌ всС эти условия ΠΏΡ€ΠΈ составлСнии рСгулярного выраТСния:

Π’Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, располагаСтся Π² forms.py:

И добавляСтся Π² ΠΏΠΎΠ»Π΅ telegram:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ Π½ΠΈΠΊΠ° Π² Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ сообщСниС ΠΎΠ± ошибкС:

   Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ Π½ΠΈΠΊΠ° Π² Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅
Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ Π½ΠΈΠΊΠ° Π² Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅

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

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ, Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… Π² Π‘Π”. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ здСсь.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Django Forms слоТно ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ – Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ рассмотрим, ΠΊΠ°ΠΊ Π·Π°Ρ‰ΠΈΡ‰Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°ΠΏΡ‡ΠΈ ΠΈ ΠΊΠ°ΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΈΠΌΠ΅ΠΉΠ».

***

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

  1. Π§Π°ΡΡ‚ΡŒ 3: ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ