Django 의 forms 구성 요소 인 스 턴 스 상세 설명
Google 은 이전에 HTML 페이지 에서 form 폼 을 이용 하여 백 엔 드 에 데 이 터 를 제출 할 때 사용자 가 입력 한 탭 을 작성 하고 form 탭 으로 패키지 합 니 다.
이 동시에 우 리 는 많은 장면 에서 사용자 의 입력 을 검증 해 야 한다.예 를 들 어 사용자 가 입력 했 는 지,입력 한 길이 와 형식 등 이 정확 하지 않다.사용자 가 입력 한 내용 에 오류 가 있 으 면 페이지 의 해당 위치 에 해당 하 는 오류 정 보 를 표시 해 야 합 니 다.
Django form 구성 요 소 는 위 에서 말 한 기능 을 실현 합 니 다.
요약 하면 form 구성 요소 의 주요 기능 은 다음 과 같 습 니 다.
from django import forms
from django.forms import widgets
class UserForm(forms.Form):
username = forms.CharField(min_length=4, label=' ',
widget=widgets.TextInput(attrs={"class": "form-control"}),
error_messages={
"required": " ",
})
pwd = forms.CharField(min_length=4, label=' ',
error_messages={
"required": " ",
},
widget=widgets.PasswordInput(attrs={"class": "form-control"}))
r_pwd = forms.CharField(min_length=4, label=' ',
widget=widgets.PasswordInput(attrs={"class": "form-control"}),
error_messages={
"required": " ",
})
email = forms.EmailField(label=' ',
widget=widgets.EmailInput(attrs={"class": "form-control"}),
error_messages={
"required": ' ',
"invalid": " ",
})
tel = forms.CharField(label=' ',
widget=widgets.TextInput(attrs={"class": "form-control"}),
)
보기 함수 다시 쓰기:보기 함수 쓰기
def reg(request):
form = UserForm()
if request.method == "POST":
print(request.POST)
# form , post
form = UserForm(request.POST) # form name forms
if form.is_valid():
print(form.cleaned_data)
return HttpResponse(' ')
return render(request, 'reg.html', locals())
login.html
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> </title>
</head>
<body>
<h3> form </h3>
<form action="" method="post">
{% csrf_token %}
<p> :<input type="text" name="username"></p>
<p> :<input type="password" name="pwd"></p>
<p> :<input type="password" name="r_pwd"></p>
<p> :<input type="email" name="email"></p>
<p> :<input type="tel" name="tel"></p>
<p><input type="submit" value=" "></p>
</form>
<h3>forms 1</h3>
<form action="" method="post" novalidate>
{% csrf_token %}
<p>{{ form.username.label }}:{{ form.username }} <span>{{ form.username.errors.0 }}</span></p>
<p> :{{ form.pwd }}
<span>{{ form.pwd.errors.0 }}</span></p>
<p> :{{ form.r_pwd }}
<span>{{ form.r_pwd.errors.0 }}</span></p>
<p> :{{ form.email }}
<span>{{ form.email.errors.0 }}</span></p>
<p> :{{ form.tel }}
<span>{{ form.tel.errors.0 }}</span></p>
<p><input type="submit" value=" "></p>
</form>
<h3>forms 2</h3>
<form action="" method="post" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="form-group clearfix">
<label for="">{{ field.label }}</label>
{{ field }}
<span style="color: red" class="pull-right">{{ field.errors.0 }}</span>
{% if field.name == 'r_pwd' %}
<span style="color: red" class="pull-right">{{ errors.0 }}</span>
{% endif %}
</div>
{% endfor %}
<input type="submit" value=" " class="btn btn-default pull-right">
</form>
<h3>forms 3 </h3>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value=" ">
</form>
</body>
</html>
웹 페이지 효 과 를 보 니 form 의 기능 도 검증 되 었 습 니 다.•전단 페이지 는 form 클래스 의 대상 이 생 성 합 니 다. -->HTML 태그 생 성 기능
•사용자 이름과 비밀번호 가 비어 있 거나 잘못 입력 되면 페이지 가 알려 집 니 다. -->사용자 제출 검사 기능
•사용자 가 잘못 진 후에 마지막 내용 을 다시 입력 하면 input 상자 에 남아 있 습 니 다. -->마지막 입력 내용 유지
그런 일 들 을 만들어 라.
상용 필드 와 플러그 인
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단일 라디오 값 문자열
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()
)
단일 선택
class LoginForm(forms.Form):
...
hobby = forms.fields.ChoiceField(
choices=((1, " "), (2, " "), (3, " "), ),
label=" ",
initial=3,
widget=forms.widgets.Select()
)
다 중 선택
class LoginForm(forms.Form):
...
hobby = forms.fields.MultipleChoiceField(
choices=((1, " "), (2, " "), (3, " "), ),
label=" ",
initial=[1, 3],
widget=forms.widgets.SelectMultiple()
)
체크 박스
class LoginForm(forms.Form):
...
keep = forms.fields.ChoiceField(
label=" ",
initial="checked",
widget=forms.widgets.CheckboxInput()
)
다 중 선택 체크 박스
class LoginForm(forms.Form):
...
hobby = forms.fields.MultipleChoiceField(
choices=((1, " "), (2, " "), (3, " "),),
label=" ",
initial=[1, 3],
widget=forms.widgets.CheckboxSelectMultiple()
)
choice 에 대한 주의사항:탭 을 선택 할 때 choices 옵션 을 데이터베이스 에서 가 져 올 수 있 음 을 주의해 야 합 니 다.그러나 정적 필드**로 가 져 온 값 은 실시 간 으로***를 업데이트 할 수 없 기 때문에 사용자 정의 구조 방법 이 필요 합 니 다.
방식 1:
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')
방식 2:
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()) #
Django Form
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
Django Form 내장 필드검사 하 다
방식 1:
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 ')],
)
방식 2:
import re
from django.forms import Form
from django.forms import widgets
from django.forms import fields
from django.core.exceptions import ValidationError
#
def mobile_validate(value):
mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
if not mobile_re.match(value):
raise ValidationError(' ')
class PublishForm(Form):
title = fields.CharField(max_length=20,
min_length=5,
error_messages={'required': ' ',
'min_length': ' 5 ',
'max_length': ' 20 '},
widget=widgets.TextInput(attrs={'class': "form-control",
'placeholder': ' 5-20 '}))
#
phone = fields.CharField(validators=[mobile_validate, ],
error_messages={'required': ' '},
widget=widgets.TextInput(attrs={'class': "form-control",
'placeholder': u' '}))
email = fields.EmailField(required=False,
error_messages={'required': u' ','invalid': u' '},
widget=widgets.TextInput(attrs={'class': "form-control", 'placeholder': u' '}))
방식 3:
def clean(self):
pwd = self.cleaned_data.get('pwd')
r_pwd = self.cleaned_data.get('r_pwd')
print(pwd, r_pwd)
if pwd and r_pwd:
if pwd == r_pwd:
return self.cleaned_data
raise ValidationError(' ')
else:
return self.cleaned_data
def clean_username(self):
val = self.cleaned_data.get('username')
user = UserInfo.objects.filter(name=val)
if not user:
return val
else:
raise ValidationError(" ")
def clean_tel(self):
val = self.cleaned_data.get('tel')
if len(val) == 11:
return val
raise ValidationError(' ')
요약:
'''
:
1、is_valid()
2、self.errors
3、self.full_clean()
4、self._clean_fields()
5、for 、
6、
:
value = field.clean(value)
self.cleaned_data[name] = value clean_data
、
hasattr(self, 'clean_%s' % name)
value = getattr(self, 'clean_%s' % name)()
pass:
self.cleaned_data[name] = value clean_data
no_pass:
raise ValidationError(msg)
:
raise ValidationError(msg)
:
1、is_valid()
2、self.errors
3、self.full_clean()
4、self._clean_form()
5、self.clean() clean
6、 :forms.errors.get("__all__")
'''
총결산위 에서 말 한 것 은 소 편 이 소개 한 Django 의 forms 구성 요소 인 스 턴 스 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.