首页 > 其他 > 详细

django--form组件

时间:2019-08-03 20:10:59      阅读:58      评论:0      收藏:0      [点我收藏+]

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

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类常用的参数

  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 #返回校验后的数据

 

django--form组件

原文:https://www.cnblogs.com/duGD/p/11295850.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!