form组件使用、常用字段、字段参数、自定义校验规则:

views:

from django.shortcuts import render,HttpResponse

# Create your views here.def reg(request):    if request.method == "POST":        user = request.POST.get("user")        pwd = request.POST.get("pwd")        if len(pwd) <= 6:            return render(request,"reg.html",{"pwd_error":"你太短了"})    return render(request,"reg.html")

#从数据库中获取数据之前使用models:from app01 import models

#继承之前导入forms:from django import forms

#定义抛出异常功能:from django.core.exceptions import ValidationError

#定义校验函数:def check_name(value):    #自定义校验规则 :    #如果校验合格 什么都不做    #校验不合格   抛出异常    if "alex" in value:        raise ValidationError("不能包含alex,非法字符")

#定义django提供内置正则校验器:from django.core.validators import RegexValidator

#使用form组件之前要定义类:class RegForm(forms.Form):    #生成input框、默认值用initial:    user = forms.CharField(        #定义必填:        required=True,        #定义是否可以禁用:        # disabled=True,        label="用户名",        initial="alex",        #定义最小长度:        min_length=6,        #定义校验:        validators=[check_name],        #定义错误信息:error_messages        error_messages={            "required":"不能为空",            "min_length":"至少为6位",        }    )    #用密文需要加widget=forms.PasswordInput:    pwd = forms.CharField(label="密码",widget=forms.PasswordInput)    #定义确认密码功能:    re_pwd = forms.CharField(label="确认密码",widget=forms.PasswordInput)    #定义单选字段:    gender = forms.ChoiceField(choices=(("1","男"),("2","女"),),initial="2")    #定义多选字段:    # hobby = forms.MultipleChoiceField(initial=["1","3"],choices=(("1","抽烟"),("2","喝酒"),("3","吐口水"),))    #从数据库中获取:    # hobby = forms.MultipleChoiceField(initial=["1","3"],choices=models.Hobby.objects.values_list("id","name"),widget=forms.CheckboxSelectMultiple)    hobby = forms.MultipleChoiceField(initial=["1","3"],widget=forms.CheckboxSelectMultiple)    #手机号校验:    phone = forms.CharField(        validators=[RegexValidator(r"^1[3-9]\d{9}$","手机号格式不正确")]    )    def __init__(self,*args,**kwargs):        super().__init__(*args,**kwargs)        #自定义操作:        print(self.fields)        self.fields["hobby"].choices = models.Hobby.objects.values_list("id","name")

    #定义clean方法局部钩子:    def clean_user(self):        #校验成功    返回当前字段的值        #校验不成功  抛出异常        if "alex" in self.cleaned_data.get("user"):            raise ValidationError("不能包含alex,非法字符")        return self.cleaned_data.get("user")

    #定义全局钩子:    def clean(self):        #全局钩子        #校验成功   返回所有字段的值 self.cleaned_data        #校验不成功 抛出异常        pwd = self.cleaned_data.get("pwd")        re_pwd = self.cleaned_data.get("re_pwd")        #判断如果相等返回所有字段的值:        if pwd == re_pwd:            return self.cleaned_data        else:            #定义添加错误的方法:            self.add_error("re_pwd","两次密码不一致!!!!")            raise ValidationError("两次密码不一致")

def reg2(request):    #拿到form对象:    form_obj = RegForm()    if request.method == "POST":        form_obj = RegForm(request.POST)        #校验用is_valid:        if form_obj.is_valid():            print(request.POST)            print(form_obj.cleaned_data,type(form_obj.cleaned_data))            return HttpResponse("注册成功")    return render(request,"reg2.html",{"form_obj":form_obj})

reg.html:
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body>

<form action="" method="post">{#    加% csrf_token %}作用是可以提交post请求:#}    {% csrf_token %}    <p>        用户名:<input type="text" name="user">    </p>    <p>        密码:<input type="password" name="pwd"><span>{{ pwd_error }}</span>    </p>    <button>注册</button></form></body></html>

reg2:
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body>

<form action="" method="post" novalidate>    {% csrf_token %}{#    {{ form_obj.as_p }}#}    <p>        <label for="{{ form_obj.user.id_for_label }}">{{ form_obj.user.label }}</label>{#        生成input框用对象点:#}        {{ form_obj.user }}<span> {{ form_obj.user.errors.0 }} </span>    </p>    <p>        <label for="{{ form_obj.pwd.id_for_label }}">{{ form_obj.pwd.label }}</label>        {{ form_obj.pwd }}<span>{{ form_obj.pwd.errors.0 }}</span>    </p>    <p>        <label for="{{ form_obj.re_pwd.id_for_label }}">{{ form_obj.re_pwd.label }}</label>        {{ form_obj.re_pwd }}<span>{{ form_obj.re_pwd.errors.0 }}</span>    </p>    <p>        <label for="{{ form_obj.gender.id_for_label }}">{{ form_obj.gender.label }}</label>        {{ form_obj.gender }}    </p>    <p>        <label for="{{ form_obj.hobby.id_for_label }}">{{ form_obj.hobby.label }}</label>        {{ form_obj.hobby }}    </p>    <p>        <label for="{{ form_obj.phone.id_for_label }}">{{ form_obj.phone.label }}</label>        {{ form_obj.phone }}<span>{{ form_obj.phone.errors.0 }}</span>    </p>    {{ form_obj.errors }}    <button>注册</button></form></body></html>

原文地址:https://www.cnblogs.com/zhang-da/p/12112476.html

时间: 2024-10-08 13:34:46

form组件使用、常用字段、字段参数、自定义校验规则:的相关文章

struts2 自定义校验规则

自定义校验规则:(了解) 在Struts2自定义校验规则: 1.实现一个Validator 接口. 2.一般开发中继承ValidatorSupport 或者 FieldValidatorSupport * ValidatorSupport           :不是针对一个字段校验. 校验确认密码(与密码字段比较) * FieldValidatorSupport :针对一个字段的校验. 步骤: 1.编写一个类继承FieldValidatorSupport public void validate

案例17-validate自定义校验规则校验验证码是否输入正确

1 自定义校验规则代码 <script type="text/javascript"> //使用validate插件进行表单的校验 $(function(){ $("#myform").validate({ rules:{ checkCode:{ "required":true, "checkVerificationCode":true } }, messages:{ checkCode:{ "requi

dwz数据校验,自定义校验规则增加

之前写数据校验时忘记写dwz里的新增自定义校验,只要找到dwz.min.js文件的  if($.validator){  的位置,在里面写上自己的校验正则表达式即可,我加了两个正则表达式,mac或mms  代码如下 if($.validator){ $.validator.addMethod("alphanumeric",function(value,element){ return this.optional(element)||/^\w+$/i.test(value);},&quo

Django---FORM组件.FORM组件的字段,FORM组件校验流程,FORM组件的全局和局部钩子,FORM和Model的组合

Django---FORM组件.FORM组件的字段,FORM组件校验流程,FORM组件的全局和局部钩子,FORM和Model的组合 一丶FORM的介绍 1.生成页面可用的HTML标签 2.对用户提交的数据进行校验 3.保留上次输入内容 二丶使用form组件实现注册功能 from django import forms # 导入forms组件 # 按照Django form组件的要求自己写一个类 class RegForm(forms.Form): # 继承Form name = forms.Ch

【Django】Form组件

目录 Form组件介绍 常用字段与插件 Form组件中所有内置字段 从数据库中获取数据 校验示例 检验手机号是否合法 方式一(基本操作) 方式二(自定义验证规则) 方式三(利用钩子) 验证密码一致性 钩子 局部钩子 全局钩子 进阶 批量添加样式 ModelForm Form套Form @ *** Form组件介绍 在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,

Form组件使用

form组件 form组件的功能 生产input标签 对提交的数据进行校验 提供错误提示 form组件中常用字段 # 查看所有字段可点进forms中,fields里面是所有字段,widgets是所有插件 CharField # 生成input框,默认文本输入框 ChoiceField # 选择框,默认是select单选下拉框 MultipleChoiceField # 多选框,默认是select下拉框.里面是选择的内容 注:想更改可以用已经写好的字段,也可以直接改widget 如:email =

django 之知识点总结以及Form组件

一.model常用操作 1.13个API查询:all,filter,get ,values,values_list,distinct,order_by ,reverse , exclude(排除),count,first,last,esits(判断是否存在) 需要掌握的all.values.values_list的区别 all:打印的是一个QuerySet集合,一个列表里面放的对象 values :是一个字典形式 values_list:是一个元组形式 all的性能是最低的 2.only和def

Django 【第十一篇】Form组件基础

一.model常用操作 1.13个API查询:all,filter,get ,values,values_list,distinct,order_by ,reverse , exclude(排除),count,first,last,esits(判断是否存在) 需要掌握的all.values.values_list的区别 all:打印的是一个QuerySet集合,一个列表里面放的对象 values :是一个字典形式 values_list:是一个元组形式 all的性能是最低的 2.only和def

django之Form组件一

一.model常用操作 1.13个API查询:all,filter,get ,values,values_list,distinct,order_by ,reverse , exclude(排除),count,first,last,esits(判断是否存在) 需要掌握的all.values.values_list的区别 all:打印的是一个QuerySet集合,一个列表里面放的对象 values :是一个字典形式 values_list:是一个元组形式 all的性能是最低的 2.only和def