-
ChoiceField 下拉框 CharField 字段 IntegerField 整数 DecimalField 小数 DataField 时间 DataTimeField 日期 EmailField 邮箱 FileField 文件 RegexField 正则
- Ajax
- form
生产HTML代码startapp
创建app02
python manage.py startapp app02
a. 创建一个类
b. 类中创建字段(包含正则表达式)
c. GET
obj = Fr()
obj.user ===>自动生成html
d. POST
obj = Fr(request.POST)
if obj.is_valid():
obj.cleaned_data
else:
obj.errors
return ..... obj
引入模块
from django import forms
from django.forms import fields
class F1Form(forms.Form)
views.py
from django.shortcuts import render, HttpResponse, redirect
from django import forms
from django.forms import fields
class F1Form(forms.Form):
user = fields.CharField(max_length=18,
min_length=6,
required=True,
error_messages={
'required': '用户名不能为空',
'max_length': '太长了',
'min_length': '太短了'
}
)
pwd = fields.CharField(min_length=32,
required=True,
error_messages={
'required':'密码不能为空',
'min_length':'最少32位'
}
)
age = fields.IntegerField(required=True,
error_messages={
'required':'年龄不能为空',
'invalid':'必须为数字'
}
)
email = fields.EmailField(required=True,
min_length=8,
error_messages={
'required':'邮箱不能为空',
'invalid':'邮箱格式错误'
}
)
def f1(request):
if request.method == "GET":
obj = F1Form()
return render(request, "f1.html",{'obj': obj})
else:
# u = request.POST.get('user') # 不能为空,长度6-18
# p = request.POST.get('pwd') # 不能为空,长度为32
# e = request.POST.get('email') # 不能为空,邮箱格式
# a = request.POST.get('age') # 不能为空,数字类型
# print(u, p, e, a)
# 1.检查是否为空
# 2.检查格式是否正确
obj = F1Form(request.POST)
if obj.is_valid(): # 是否全部验证成功
print('验证成功', obj.cleaned_data) # 用户提交的数据
return redirect('https://www.baidu.com')
else:
print('验证失败', obj.errors)
return render(request, 'f1.html', {'obj': obj})
f1.html
app02
Form组件里面的生产html代码的用法
from django.shortcuts import render
from django import forms
from django.forms import fields, widgets
# Create your views here.
class TextForm(forms.Form):
user = fields.CharField(
required=True, # 是否必填
max_length=32, # 最大长度
min_length=8, # 最短长度
error_messages={}, # 错误提示
# widget=widgets.Select(), # 生成HTML标签
# label='用户名',
help_text='aaaaa', # 帮助信息(在标签的旁边)
show_hidden_initial=False, # 是否在当前插件后在加一个隐藏的且具有默认值的插件
validators=[], # 自定义验证规则,比如编写只能输入11位手机号的数字等等
disabled=False, # 是否可编辑状态 T 不可 F 可以
label_suffix=':::',
initial='aaa', # 文本框默认值
)
age = fields.IntegerField(
label='年龄'
)
email = fields.EmailField(
label='邮箱'
)
def text(request):
obj = TextForm()
return render(request, 'text.html', {'obj': obj})
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)
...