django formsフォーム
目次: formsフォーム紹介 forms共通フィールドとプラグイン formsすべての組み込みフィールド 正規検査フィールド フック関数カスタムチェック FORMSの紹介
多くのアプリケーションシーンでは、ユーザーが入力したかどうかを検証したり、入力の長さやフォーマットが正しくないなど、ユーザーの入力を検証する必要があります.ユーザが入力した内容にエラーがある場合は、ページ上の対応する位置にエラー情報を表示する必要がある.
formコンポーネントの主な機能は以下の通りです.ページで使用可能なHTMLタグ を生成する.ユーザが提出するデータを検証する .前回入力内容 を保持する.
基本的にformsコンポーネントを使用して登録機能を実現
views.py
ビュー関数をもう1つ書きます.
login2.html
まとめ:•フロントエンドページはformクラスのオブジェクトから生成される-->HTMLタグ機能の生成•ユーザー名とパスワードの入力が空または間違っている場合はページにプロンプトが表示される-->ユーザーがチェック機能をコミットする•ユーザーが間違っている場合は前回の内容を再度入力してinputボックスに残す-->前回の入力内容を保持する
カタログに戻る
forms共通フィールドとプラグイン
Formクラスを作成する際、主に「フィールド」と「プラグイン」に関連し、フィールドはユーザーにデータの検証を要求し、プラグインはHTMLを自動的に生成する.
カタログに戻る
formsすべての組み込みフィールド
カタログに戻る
正規検査フィールド
RegexValidatorベリファイア
カタログに戻る
フック関数カスタムチェック
ローカルフック
Fomクラスでclean_を定義しますフィールド名()メソッドにより、特定のフィールドを検証できます.
グローバルフック
Fomクラスでclean()メソッドを定義すると,フィールドのグローバル検証を実現できる.
カタログに戻る
多くのアプリケーションシーンでは、ユーザーが入力したかどうかを検証したり、入力の長さやフォーマットが正しくないなど、ユーザーの入力を検証する必要があります.ユーザが入力した内容にエラーがある場合は、ページ上の対応する位置にエラー情報を表示する必要がある.
formコンポーネントの主な機能は以下の通りです.
基本的にformsコンポーネントを使用して登録機能を実現
views.py
# RegForm :
from django import forms
# Django form
class RegForm(forms.Form):
name = forms.CharField(label=" ")
pwd = forms.CharField(label=" ")
ビュー関数をもう1つ書きます.
# form
def register2(request):
form_obj = RegForm()
if request.method == "POST":
# form , post
form_obj = RegForm(request.POST)
# form_obj
if form_obj.is_valid():
return HttpResponse(" ")
return render(request, "register2.html", {"form_obj": form_obj})
'''
#
obj.is_valid()
#
obj.errors
{'password': ['Ensure this value has at least 3 characters (it has 2).'],
'email': ['Enter a valid email address.']}
#
obj.cleaned_data
'''
login2.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title> 2title>
head>
<body>
<form action="/reg2/" method="post" novalidate autocomplete="off">
{% csrf_token %}
<div>
<label for="{{ form_obj.name.id_for_label }}">{{ form_obj.name.label }}label>
{{ form_obj.name }} {{ form_obj.name.errors.0 }}
div>
<div>
<label for="{{ form_obj.pwd.id_for_label }}">{{ form_obj.pwd.label }}label>
{{ form_obj.pwd }} {{ form_obj.pwd.errors.0 }}
div>
<div>
<input type="submit" class="btn btn-success" value=" ">
div>
form>
body>
html>
// forms input form submit
まとめ:•フロントエンドページはformクラスのオブジェクトから生成される-->HTMLタグ機能の生成•ユーザー名とパスワードの入力が空または間違っている場合はページにプロンプトが表示される-->ユーザーがチェック機能をコミットする•ユーザーが間違っている場合は前回の内容を再度入力してinputボックスに残す-->前回の入力内容を保持する
カタログに戻る
forms共通フィールドとプラグイン
Formクラスを作成する際、主に「フィールド」と「プラグイン」に関連し、フィールドはユーザーにデータの検証を要求し、プラグインはHTMLを自動的に生成する.
# initial
# ,input 。
class LoginForm(forms.Form):
username = forms.CharField(
min_length=8,
label=" ",
initial=" " #
)
pwd = forms.CharField(min_length=6, label=" ")
# error_messages
# 。
class LoginForm(forms.Form):
username = forms.CharField(
min_length=8,
label=" ",
initial=" ",
error_messages={
"required": " ",
"invalid": " ",
"min_length": " 8 "
}
)
pwd = forms.CharField(min_length=6, label=" ")
# password
class LoginForm(forms.Form):
...
pwd = forms.CharField(
min_length=6,
label=" ",
widget=forms.widgets.PasswordInput(attrs={'class': 'c1'}, render_value=True)
)
# radioSelect
# radio
class LoginForm(forms.Form):
username = forms.CharField(
min_length=8,
label=" ",
initial=" ",
error_messages={
"required": " ",
"invalid": " ",
"min_length": " 8 "
}
)
pwd = forms.CharField(min_length=6, label=" ")
gender = forms.fields.ChoiceField(
choices=((1, " "), (2, " "), (3, " ")),
label=" ",
initial=3,
widget=forms.widgets.RadioSelect()
)
# Select
class LoginForm(forms.Form):
...
hobby = forms.ChoiceField(
choices=((1, " "), (2, " "), (3, " "), ),
label=" ",
initial=3,
widget=forms.widgets.Select()
)
# Select
class LoginForm(forms.Form):
...
hobby = forms.MultipleChoiceField(
choices=((1, " "), (2, " "), (3, " "), ),
label=" ",
initial=[1, 3],
widget=forms.widgets.SelectMultiple()
)
# checkbox
class LoginForm(forms.Form):
...
keep = forms.ChoiceField(
label=" ",
initial="checked",
widget=forms.widgets.CheckboxInput()
)
# checkbox
class LoginForm(forms.Form):
...
hobby = forms.MultipleChoiceField(
choices=((1, " "), (2, " "), (3, " "),),
label=" ",
initial=[1, 3],
widget=forms.widgets.CheckboxSelectMultiple()
)
# choice
# , choices , , choice 。
# :
from django.forms import Form
from django.forms import widgets
from django.forms import fields
class MyForm(Form):
user = fields.ChoiceField(
# choices=((1, ' '), (2, ' '),),
initial=2,
widget=widgets.Select
)
def __init__(self, *args, **kwargs):
super(MyForm,self).__init__(*args, **kwargs)
# self.fields['user'].choices = ((1, ' '), (2, ' '),)
#
self.fields['user'].choices = models.Classes.objects.all().values_list('id','caption')
# :
from django import forms
from django.forms import fields
from django.forms import models as form_model
class FInfo(forms.Form):
authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all()) #
# authors = form_model.ModelChoiceField(queryset=models.NNewType.objects.all()) #
カタログに戻る
formsすべての組み込みフィールド
Field
required=True,
widget=None, HTML
label=None, Label
initial=None,
help_text='', ( )
error_messages=None, {'required': ' ', 'invalid': ' '}
validators=[],
localize=False,
disabled=False,
label_suffix=None Label
CharField(Field)
max_length=None,
min_length=None,
strip=True
IntegerField(Field)
max_value=None,
min_value=None,
FloatField(IntegerField)
...
DecimalField(IntegerField)
max_value=None,
min_value=None,
max_digits=None,
decimal_places=None,
BaseTemporalField(Field)
input_formats=None
DateField(BaseTemporalField) :2015-09-01
TimeField(BaseTemporalField) :11:12
DateTimeField(BaseTemporalField) :2015-09-01 11:12
DurationField(Field) :%d %H:%M:%S.%f
...
RegexField(CharField)
regex,
max_length=None,
min_length=None,
error_message=None, , error_messages={'invalid': '...'}
EmailField(CharField)
...
FileField(Field)
allow_empty_file=False
ImageField(FileField)
...
: PIL ,pip3 install Pillow
, :
- form enctype="multipart/form-data"
- view obj = MyForm(request.POST, request.FILES)
URLField(Field)
...
BooleanField(Field)
...
NullBooleanField(BooleanField)
...
ChoiceField(Field)
...
choices=(), , :choices = ((0,' '),(1,' '),)
required=True,
widget=None, , select
label=None, Label
initial=None,
help_text='',
ModelChoiceField(ChoiceField)
... django.forms.models.ModelChoiceField
queryset, #
empty_label="---------", #
to_field_name=None, # HTML value
limit_choices_to=None # ModelForm queryset
ModelMultipleChoiceField(ModelChoiceField)
... django.forms.models.ModelMultipleChoiceField
TypedChoiceField(ChoiceField)
coerce = lambda val: val
empty_value= ''
MultipleChoiceField(ChoiceField)
...
TypedMultipleChoiceField(MultipleChoiceField)
coerce = lambda val: val
empty_value= ''
ComboField(Field)
fields=() , : 20,
fields.ComboField(fields=[fields.CharField(max_length=20), fields.EmailField(),])
MultiValueField(Field)
PS: , , MultiWidget
SplitDateTimeField(MultiValueField)
input_date_formats=None, :['%Y--%m--%d', '%m%d/%Y', '%m/%d/%y']
input_time_formats=None :['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
FilePathField(ChoiceField) ,
path,
match=None,
recursive=False,
allow_files=True,
allow_folders=False,
required=True,
widget=None,
label=None,
initial=None,
help_text=''
GenericIPAddressField
protocol='both', both,ipv4,ipv6 IP
unpack_ipv4=False ipv4 , ::ffff:192.0.2.1 , 192.0.2.1, PS:protocol both
SlugField(CharField) , , , ( )
...
UUIDField(CharField) uuid
カタログに戻る
正規検査フィールド
RegexValidatorベリファイア
from django.forms import Form
from django.forms import widgets
from django.forms import fields
from django.core.validators import RegexValidator
class MyForm(Form):
user = fields.CharField(
validators=[RegexValidator(r'^[0-9]+$', ' '), RegexValidator(r'^159[0-9]+$', ' 159 ')],
)
カタログに戻る
フック関数カスタムチェック
ローカルフック
Fomクラスでclean_を定義しますフィールド名()メソッドにより、特定のフィールドを検証できます.
class LoginForm(forms.Form):
username = forms.CharField(
min_length=8,
label=" ",
initial=" ",
error_messages={
"required": " ",
"invalid": " ",
"min_length": " 8 "
},
widget=forms.widgets.TextInput(attrs={"class": "form-control"})
)
...
# , username
def clean_username(self):
value = self.cleaned_data.get("username")
if "666" in value:
raise ValidationError(" 666 ")
else:
return value
グローバルフック
Fomクラスでclean()メソッドを定義すると,フィールドのグローバル検証を実現できる.
class LoginForm(forms.Form):
...
password = forms.CharField(
min_length=6,
label=" ",
widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'}, render_value=True)
)
re_password = forms.CharField(
min_length=6,
label=" ",
widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'}, render_value=True)
)
...
# ,
def clean(self):
password_value = self.cleaned_data.get('password')
re_password_value = self.cleaned_data.get('re_password')
if password_value == re_password_value:
return self.cleaned_data
else:
self.add_error('re_password', ' ')
raise ValidationError(' ')
カタログに戻る