• Django form表单


    Django Form介绍

    form组件的用法
    调用类
    from django import forms
    调用插件
    from django.forms import widgets

    定义类
    class 类名(forms.Form)
    添加参数
    user = forms.CharField(参数1...) #字符串格式
    email=forms.EmailField(参数1...) #Email格式
    gender = forms.ChoiceField(参数1...) #单选选择格式
    gender = forms.MultipleChoiceField(参数1...) #多选选择格式


    生产HTML文件
    实例化一个form对象, 传递到模板语言中
    form_obj = RegForm()
    在目标语言中调用form对象的响应方法和属性


    做校验:
    form_obj = RegForm(request.POST)
    form_obj.is_valid()


    min_length参数 #最小位限制
    min_length=4,

    max_length参数 #最小位限制
    max_length=16,

    label参数 #label的名字
    label="用户名",

    initial参数 # 设置默认值
    initial="张三"

    widget参数 #控制的是生成html代码相关的
    widget=forms.widgets.PasswordInput(attrs={'class': 'c1'}, render_value=True),

    validators参数 #自定义校验
    validators=[RegexValidator(r'^[0-9]+$', '请输入数字'), RegexValidator(r'^159[0-9]+$', '数字必须以159开头')],

    error_messages参数 #重写错误信息
    前面为错误触发,后面为错误触发后提示的信息
    error_messages={
    "required": "不能为空",
    "invalid": "格式错误",
    'min_length':'账户不能小于4位',
    'max_length':'长度不能超过12位',
    }
    例:
    name = forms.CharField(min_length=4,
    max_length=12,
    label='账户',
    initial='aaa',
    error_messages={
    "required": "不能为空",
    "invalid": "格式错误",
    'min_length':'账户不能小于4位',
    'max_length':'长度不能超过12位',
    })

    password参数 #密码变成远点,非明文
    widget=forms.widgets.PasswordInput(attrs={'class': 'c1'}, render_value=True)

    RadioSelect #圆点单选
    gender = forms.ChoiceField(
    choices=((1, "男"), (2, "女"), (3, "保密")),
    label="性别",
    initial=3, #默认选3
    widget=forms.widgets.RadioSelect #将选择变成圆点单选
    )

    Select #下拉框单选
    hobby = forms.ChoiceField(
    choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),
    label="爱好",
    initial=3,
    widget=forms.widgets.Select #将选择变成下拉框单选
    )

    SelectMultiple #下拉框多选
    hobby = forms.MultipleChoiceField(
    choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),
    label="爱好",
    initial=[1, 3], #多选默认需要用列表
    widget=forms.widgets.SelectMultiple #将选择变成下拉框多选
    )

    CheckboxInput #方框单选
    keep = forms.ChoiceField(
    label="是否记住密码",
    initial="checked",
    widget=forms.widgets.CheckboxInput #方框单选
    )

    CheckboxSelectMultiple #方框多选
    hobby = forms.MultipleChoiceField(
    choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
    label="爱好",
    initial=[1, 3],
    widget=forms.widgets.CheckboxSelectMultiple #方框多选
    )

    TextInput #给input标签加类
    widgets=widgets.TextInput(attrs={"class":"a"}),

    choices自定义构造方法
    def __init__(self, *args, **kwargs): #重构父类方法
    super().__init__(*args, **kwargs)

    #从数据库取值然后赋予,因为用于多选,他的值是小元组的方式,所以数据库取值时要用values_list
    self.fields['user'].choices = models.Classes.objects.all().values_list('id','caption')

    form 自定义校验
    导入校验模块
    from django.core.validators import RegexValidator

    RegexValidator 进行正则校验
    validators=[RegexValidator(r'^[0-9]+$', '请输入数字'), RegexValidator(r'^159[0-9]+$', '数字必须以159开头')],

    钩子函数修改
       #导入异常方法
      from django.core.exceptions import ValidationError
        def clean_name(self):  #查找name
    value = self.cleaned_data.get("name") #取出name数据
    if "JPM" in value: #包含JPM就报错
    raise ValidationError("不符合社会主义核心价值观!") #返回错误异常
    return value #不报错正常返回数据

    # 重写父类的clean方法
    def clean(self):
    # 此时 通过检验的字段的数据都保存在 self.cleaned_data
    pwd = self.cleaned_data.get("pwd") #取密码1
    re_pwd = self.cleaned_data.get("re_pwd") #取重复密码2
    if pwd != re_pwd: #判断
    self.add_error("re_pwd", ValidationError("两次密码不一致")) #两次密码不一致就加错误
    raise ValidationError("两次密码不一致") #然后返回错误异常不一致
    return self.cleaned_data #没错误直接返回数据


  • 相关阅读:
    没有完成的题目
    哈尔滨工程大学 ACM online contest 1008 how many
    POJ 2976 分数规划
    长沙理工 ACM 数位 DP 1488
    POJ 2663
    USETC 1821 AC 自动机
    长沙理工 ACM 分数规划 1494
    正则表达式基础知识(转)
    上传头像代码
    datalist 分页(转)
  • 原文地址:https://www.cnblogs.com/yangli0504/p/9251187.html
Copyright © 2020-2023  润新知