Django Form 的主要内置字段介绍
程序员文章站
2022-06-22 11:02:19
修改 urls.py,添加 在 templates 下创建 field.html, 内容如下: 修改 views.py 修改 forms.py ......
修改 urls.py,添加
path('field.html', views.field),
在 templates 下创建 field.html, 内容如下:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> <form method="post" action="/field.html" enctype="multipart/form-data"> <div>f1: <label for="{{ obj.f1.id_for_label }}">{{ obj.f1.label }}</label> {{ obj.f1.label_tag }} {{ obj.f1 }}</div> <div>f3: {{ obj.f3 }}</div> <div>f4: {{ obj.f4 }}</div> <div>f5: {{ obj.f5 }}</div> <div>f6: {{ obj.f6 }}</div> <div>f7: {{ obj.f7 }}</div> <div>f8: {{ obj.f8 }}</div> <input type="submit" value="提交"> </form> </body> </html>
修改 views.py
from app01 import forms def field(request): if request.method == 'get': obj = forms.fieldform() return render(request, 'field.html', {'obj': obj}) elif request.method == 'post': obj = forms.fieldform(request.post, request.files) obj.is_valid() print(obj.clean()) print(obj.errors.as_json()) return render(request, 'field.html', {'obj': obj})
修改 forms.py
from django.core.validators import regexvalidator class fieldform(dforms.form): f1 = fields.charfield( max_length=6, # 最大长度 required=true, # 是否允许为空 initial='world', # 初始值 validators=[regexvalidator(r'^[0-9]+$', '请输入数字', code='e1'), regexvalidator(r'159[0-9]+$', '数字必须以159开头', code='e2')], # 自定义验证规则 error_messages={'required': 'not null', 'invalid': 'wrong format', 'e1': 'input number', 'e2': 'begin with 159', 'max_length': 'too long'}, # 错误信息 show_hidden_initial=true, # 是否在当前插件后面再加一个隐藏的且具有默认值的插件(可用于检验两次输入是否一直) label='hello', # 用于生成label标签或显示内容 disabled=false, # 是否可以编辑 label_suffix=' -->', # label内容后缀 ) # f2 = fields.regexfield(r'159[0-9]+$') f3 = fields.filefield() f4 = fields.choicefield( initial=2, choices=[(1, '赵四'), (2, '刘能'), (3, '王舞')], ) f5 = fields.typedchoicefield( coerce=lambda x: int(x), # 对选中的每一个值进行一次转换 initial=2, choices=[(1, '赵四'), (2, '刘能'), (3, '王舞')], ) f6 = fields.multiplechoicefield( initial=[2, 3], choices=[(1, '赵四'), (2, '刘能'), (3, '王舞')], ) f7 = fields.splitdatetimefield() f8 = fields.filepathfield( path='app01', # 文件夹路径 recursive=true, # 递归下面的文件夹 allow_folders=true # 允许文件夹 )
下一篇: pymysql指南