欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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       # 允许文件夹
    )

Django Form 的主要内置字段介绍