django forms组件应用

1创建forms.py
from django import forms # 引入forms组件

 
class UserForm(forms.Form):   # 必须继承forms.Form
        name = forms.CharField(max_leng=4,required=True)
        pwd = forms.CharField(min_length=4)
    #属性配置
        def clean_name(self):
        name = self.cleaned_data['name']
        have_symbol = re.match('[^a-zA-Z0-9._-]+', name)
        if have_symbol:
            raise forms.ValidationError(_('The name of the host must not contain any special characters'))
        elif len(name) > 20:
            raise forms.ValidationError(_('The name of the host must not exceed 20 characters'))
        return name

views.py

def reg(request):
    if request.method=="POST":
        print(request.POST)
        # 生成forms对象后,传入字典就可以做一个个值的校验
        # form = UserForm({"name": "yuan", "email": "123@qq.com", "xxx":"alex"})
        form = UserForm(request.POST)   # form表单的name属性值应该与forms组件的字段名称一致,不一致的键值不会去做校验
        print(form.is_valid())  
        if form.is_valid():  # 注意:form.is_valid是帮忙校验返回布尔值的,true或false(所有都通过才返回true)
            # 类定义的字段均符合要求,返回true,有多的字段直接忽略
            print(form.cleaned_data)   # {'name': 'yuan', 'pwd': '1234', 'r_pwd': '1234', 'email': '1234@163.com', 'tel': '123123'}
        else:
            # 有正确也有错误信息也是返回false
            print(form.cleaned_data)   # 字段值符合要求的放在cleaned_data    {'name': 'yuan', 'pwd': '123456', 'tel': '123123'}
            print(form.errors)         # 字段不符合要求的对应的键作为键,错误信息作为值   <ul 
        form.is_valid()  校验返回布尔值
        if 所有的字段校验成功,则form.cleaned_data:{"name": "yuan", "email": "123@qq.com"}
        如果校验失败,则form.errors放入所有错误的字段。
        """
        return HttpResponse("OK")
    return render(request, "reg.html")
    

.html
三种渲染方式

<h3>form组件渲染方式1</h3>
<form action="" method="post">
    {% csrf_token %}
    <p>{{ form.name.label }}
        {{ form.name }}
    </p>
    <p>{{ form.pwd.label }}
        {{ form.pwd }}
    </p>
    <p>{{ form.r_pwd.label }}
        {{ form.r_pwd }}
    </p>
    <input type="submit">
</form>

2。

<h3>forms组件渲染方式2</h3>
<form action="" method="post">
    {% csrf_token %}
    {% for field in form %}
        <p>
            <label for="">{{ field.label }}</label>
            {{ field }}
        </p>
    {% endfor %}
    <input type="submit">
</form>

3。

<hr>
<h3>forms组件渲染方式3</h3>
<form action="" method="post">
    {% csrf_token %}
    {{ form.as_p }}
</form>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值