π ΠΠ°ΠΊ ΡΠ·Π½Π°ΡΡ ΠΏΠΎΡΠ΅ΠΌΡ ΡΠΎΡΠΌΠ° Π½Π΅ Π²Π°Π»ΠΈΠ΄Π½Π° Π² Django?
Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠΎΡΠΌΠ° Π½Π΅ Π²Π°Π»ΠΈΠ΄Π½Π° Π² Django, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ is_valid()
Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡΠΈ ΡΠΎΡΠΌΡ. ΠΡΠ»ΠΈ ΡΠΎΡΠΌΠ° Π½Π΅ Π²Π°Π»ΠΈΠ΄Π½Π°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ, Π²ΡΠ·Π²Π°Π² ΠΌΠ΅ΡΠΎΠ΄ errors
. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
form = YourForm(request.POST)
if form.is_valid():
# ΠΠ΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈ Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅
else:
errors = form.errors
# Π Π°Π±ΠΎΡΠ° Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΡΠ·Π½Π°ΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠΎΡΠΌΠ° Π½Π΅ Π²Π°Π»ΠΈΠ΄Π½Π° Π² Django
ΠΠ΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Django, ΡΠ°ΡΡΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΠΎΡΠΌΠ° Π½Π΅ Π²Π°Π»ΠΈΠ΄Π½Π°, ΡΠΎ Π΅ΡΡΡ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Π² Π²Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΡΠΌΡ Django.
1. ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΡΠΎΡΠΌΡ
ΠΠΎΠ³Π΄Π° ΡΠΎΡΠΌΠ° Π½Π΅ Π²Π°Π»ΠΈΠ΄Π½Π°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Django ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΈΡ Π² Π²Π°ΡΠ΅ΠΌ HTML-ΡΠ°Π±Π»ΠΎΠ½Π΅.
# ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠΎΡΠΌΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ 'MyForm'
from django.shortcuts import render
def my_view(request):
form = MyForm(request.POST)
if form.is_valid():
# ΠΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΈ Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅
# ...
pass
else:
# ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ
errors = form.errors
return render(request, 'my_template.html', {'form': form, 'errors': errors})
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠΎΡΠΌΠ° 'MyForm' Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΉ. ΠΡΠ»ΠΈ ΠΎΠ½Π° Π½Π΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ, ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ 'errors' ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΠΈΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΎΡΠΌΠΎΠΉ Π² Π½Π°Ρ HTML-ΡΠ°Π±Π»ΠΎΠ½ 'my_template.html'.
2. ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ Django
Π§ΡΠΎΠ±Ρ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π² HTML-ΡΠ°Π±Π»ΠΎΠ½Π΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΊΠ» 'for' ΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΏΠΎ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»Ρ.
ΠΡΠ²ΠΎΠ΄ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²Π½ΡΡΡΠΈ ΡΠΈΠΊΠ»Π° 'for', Π³Π΄Π΅ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π΅ΡΡΡ Π»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΡΠΎΡΠΌΡ. ΠΡΠ»ΠΈ Π΅ΡΡΡ, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ 'field.errors' Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π² HTML-ΡΠ°Π±Π»ΠΎΠ½Π΅.
3. ΠΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅ ΡΠΎΡΠΌΡ
ΠΠ½ΠΎΠ³Π΄Π° Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅ ΡΠΎΡΠΌΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π½Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠΌΡ ΠΏΠΎΠ»Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ 'as_data()' ΠΎΠ±ΡΠ΅ΠΊΡΠ° 'form.errors'.
def my_view(request):
form = MyForm(request.POST)
if form.is_valid():
# ΠΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΈ Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅
# ...
pass
else:
# ΠΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅ ΡΠΎΡΠΌΡ
error_message = form.errors.as_data()['field_name'][0].message
return render(request, 'my_template.html', {'form': form, 'error_message': error_message})
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ 'field_name' Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° 'as_data()'. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ 'message'.
4. ΠΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
Django ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΡΠΎΡΠΌΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡ 'error_messages' Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΡΠΎΡΠΌΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
from django import forms
class MyForm(forms.Form):
field_name = forms.CharField(
error_messages={
'required': 'ΠΡΠΎ ΠΏΠΎΠ»Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.',
'invalid': 'ΠΠ΅Π²Π΅ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ.',
}
)
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π΄Π»Ρ ΠΏΠΎΠ»Ρ 'field_name'. ΠΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π΄Π²Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ: 'required' Π΄Π»Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΠΈ 'invalid' Π΄Π»Ρ Π½Π΅Π²Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ°.
5. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡΠΌΡ Ρ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ 'submit'
ΠΠΎΠ³Π΄Π° Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠΎΡΠΌΡ Ρ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ 'submit', Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡ 'formnovalidate' Π΄Π»Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ°. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΡΠΎΡΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅.
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡ 'formnovalidate' ΠΊ ΠΊΠ½ΠΎΠΏΠΊΠ΅ 'submit', ΡΡΠΎΠ±Ρ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎΡΠΌΠ° Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Π±Π΅Π· Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π±ΡΠ»ΠΎ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΡΠ·Π½Π°ΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠΎΡΠΌΠ° Π½Π΅ Π²Π°Π»ΠΈΠ΄Π½Π° Π² Django. ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΡΠΎΡΠΌΡ, Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ, ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠΌΡ Π±Π΅Π· Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ°. Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΎ Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΡΡ ΡΠΎΡΠΌΠ°Ρ Π² Π²Π°ΡΠ΅ΠΌ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Django.