django--form组件

---恢复内容开始---

form组件主要的作用

1、生成HTML标签

2、初始化页面数据

3、验证用户输入的数据以及反馈错误信息

4、HTMLFORM保留上次提交内容

form组件用法

from django import forms
导入forms组件包
class RegForm(forms.Form): username = forms.CharField(max_length=8,
                  min_length=3,
                  label='用户名',
error_messages
={ 'max_length':'用户名最长八位', 'min_length':'用户名最短三位', 'required':'用户名不能为空' },widget=forms.widgets.TextInput(attrs={"class":'form-control'}) ) password = forms.CharField(max_length=8, min_length=3, label='密码', error_messages={ 'max_length': '密码最长八位', 'min_length': '密码最短三位', 'required': '密码不能为空' }, widget=forms.widgets.PasswordInput(attrs={"class": 'form-control'}) ) confirm_password = forms.CharField(max_length=8, min_length=3, label='确认密码', error_messages={ 'max_length': '确认密码最长八位', 'min_length': '确认密码最短三位', 'required': '确认密码不能为空' }, widget=forms.widgets.PasswordInput(attrs={"class": 'form-control'}) ) email = forms.EmailField(label='邮箱',error_messages={ 'invalid':'邮箱格式错误', 'required':'邮箱不能为空' },widget=forms.widgets.EmailInput(attrs={'class':'form-control'}))

前端渲染页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>register</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link rel="stylesheet" href="/static/bs-3.3.7/css/bootstrap.css">
    <script src="/static/bs-3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<form action="" id="my_form">
{% csrf_token %}
{% for foo in form_obj %}
    <label for='{{ foo.auto_id }}'>{{ foo.label }}</label>
    {{ foo }}
    <span class="pull-right"></span>
{% endfor %}
<div>
    <label for="id_avatar">
        头像
        <img src="/static/image/default.jpg" alt="" id="my_img" style="width: 50px">
    </label>
    <input type="file" id="id_avatar" name="my_avatar" class="hidden">

</div>
 <input type="button" class="btn btn-success pull-right" value="注册" id="id_submit">
</form>


</form>
</body>

 form类常用的参数

扫描二维码关注公众号,回复: 6941372 查看本文章

  initial :初始值

   input框里的初始参数

class LoginForm(forms.Form):
    username = forms.CharField(
        min_length=8,
        label="用户名",
        initial="张三"  # 设置默认值
    )

  error_messages : 重写错误信息

email = forms.EmailField(label='邮箱',error_messages={
        'invalid':'邮箱格式错误',
        'required':'邮箱不能为空'

  widget窗口部件

需要更改某个表单默认的元素就需要使用widget,并且改变其元素属性就需要使用attrs。

password = forms.CharField(max_length=8, min_length=3, label='密码',
                               error_messages={
                                   'max_length': '密码最长八位',
                                   'min_length': '密码最短三位',
                                   'required': '密码不能为空'
                               }, widget=forms.widgets.PasswordInput(attrs={"class": 'form-control'}),
                    render_value=True )

其中

attrs={"class": 'form-control'} 是为当前input标签增加样式类
render_value=True  是指当前输入的密码校验失败的话是否保留输入框原有的值,True代表保留

 单选Select

hobby = forms.fields.ChoiceField(
        choices=((1, "song"), (2, "jump"), (3, "rap"), ),
        label="爱好",
        initial=3,
        widget=forms.widgets.Select
    )

多选Selete

hobby = forms.fields.MultipleChoiceField(
        choices=((1, "song"), (2, "dance"), (3, "rap"), ),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.SelectMultiple
    )

单选checkbox

  keep= forms.fields.ChoiceField(
        label="是否记住密码",
        initial="checked",
        widget=forms.widgets.CheckboxInput
)

多选checkbox

    hobby = forms.fields.MultipleChoiceField(
        choices=((1, "song"), (2, "dance"), (3, "rap"),),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.CheckboxSelectMultiple
    )

 Form校验

 一、使用正则表达式

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('手机号码格式错误')

二、钩子函数

 # 局部钩子  判断当前用户名是否存在
    def clean_username(self):
        username = self.cleaned_data.get('username')
        user_obj = models.Userinfo.objects.filter(username=username).first()
        if user_obj:
            self.add_error('username','用户名已存在')
        else:
            return username

    # 全局钩子  校验两次密码是否一直
    def clean(self):
        password = self.cleaned_data.get('password')
        confirm_password = self.cleaned_data.get('confirm_password')
        if not password == confirm_password:
            self.add_error('confirm_password','两次密码不一致')
        else:
            return self.cleaned_data #返回校验后的数据

猜你喜欢

转载自www.cnblogs.com/duGD/p/11295850.html
今日推荐