首页 > 其他分享 >Django之form表单的数据验证

Django之form表单的数据验证

时间:2022-10-19 10:57:22浏览次数:55  
标签:form fields initial label 表单 forms choices 格式 Django

 

1.先导入forms模块

from django import forms

 

2.创建模板的类

class loginform(forms.Form):
    # 2、模板中的元素
    name = forms.CharField(min_length=6,error_messages={"requird":"用户名不能为空","min_length":"最小长度为6"})
    # requird这个是错误码
 
    email = forms.EmailField()

这里这个error_messages写出错的信息,每个不同的错误码对应不同的报错信息

 

3.在视图函数中使用这个类

def login(request):
    if request.method.lower() == "post":
        # 3、创建一个模板的对象,然后把数据传递个这个对象
        obj = loginform(request.POST)
 
        # 4、启动校验
 
        status= obj.is_valid()
        print(status)
 
        # 5、正确的信息
        success_dict = obj.clean()
        print(success_dict)
 
        # 6、错误的信息
        failed_dict = obj.errors.as_json()
        print(failed_dict)
        return redirect("/app1/login")
    else:
        return render(request,"login.html")

 

更多验证支持:

 forms.CharField(
 
        # 这个属性是charfiled特有的
        # max_length=233,最大的字符长度
        # min_length=234,最小的字符长度
 
 
 
        # 下面这些属性是filed都有的,下面参数都可以用下面的参数
 
        # required=True 是否必填
        # label=None 就是显示一个字符串,在前台渲染的时候用obj.arg1.label就会显示label的值,只是一个锦上添花的作用
        # initial=None 这里就是一个默认值,也就是初始值
        # help_text=''这里就是一个帮助信息
 
        # error_messages=None 出错的时候显示的信息
 
        # show_hidden_initial=False 是否生成带有默认值的一个隐藏的标签,可以用来判断现在的输入值和默认值是否相同
 
        # validators=() 自定义一个正则表达式
 
        # localize=False 是否支持本地化,暂时不需要掌握
 
        # disabled=False 标签是否能否能编辑
 
        # label_suffix=None 默认这个值就是冒号,也就是前面label的值和input框之间的冒号,如果设置了这个值,就会替代lable和input框中之间的冒号
 
        # error_messages=None
        # error_messages={"required":"不能为空","invalid":"格式错误",}
 
    )

  

forms.IntegerField(
        # max_value=23,  最大值
        # min_value=21.  最小值
    )



forms.FloatField(
 
    )

 

arg4 = forms.DateField(
        # 页面必须要满足这个格式,格式是:2015-09-03
    )
 
    arg5 = forms.TimeField(
        # 页面必须要满足这个格式,格式是:11:34
    )
 
    arg6 = forms.DateTimeField(
        # 页面必须要满足这个格式,格式是:2015-09-03 11:34
    )

  

 

arg7 = forms.EmailField(
 
    )
 
    arg8 = forms.PasswordInput(
 
    )
 
    arg9 = forms.RegexField(
        # 通过正则表达式自定义字段
    )
 
    arg10 = forms.FileField(
 
    )
 
    arg11 = forms.ImageField(
 
    )
 
    # 单选框
    arg12 = forms.ChoiceField(
        initial=2,
        choices=((1,"内蒙古"),(2,"黑龙江"),(3,"广东"))
    )
 
    # 多选框
    arg13 = forms.MultipleChoiceField(
        initial=[1,2],
        choices=((1,"内蒙古"),(2,"黑龙江"),(3,"广东"))
    )
 
    arg14 = forms.FilePathField(
        # recursive=False 是否递归显示,是否显示文件下的文件
 
 
        # 指定一个路径,会把这个路径下所有的文件和路径用select框显示出来
    )
 
    arg15 = forms.GenericIPAddressField(
        # 解析ip地址
    )
    arg16 = forms.SlugField(
        # 只允许输入,字母数字和下划线减号
    )
 
    arg17 = forms.UUIDField(
        # 只支持uuid格式的输入
    )
    # 这里的arg*就是k值

  

 f8 = fields.ChoiceField(
        choices=[(1, "上海3"), (2, "北京3"), (3, "深圳3")],
        initial=3,
        required=True,
        label="城市",
        label_suffix="------>"
    )
 
    f9 = fields.TypedChoiceField(
        choices=[(1, "上海4"), (2, "北京4"), (3, "深圳4")],
        initial=3,
        required=True,
        coerce=lambda x:int(x)
    )
 
    f10 = fields.MultipleChoiceField(
        choices=[(1, "上海5"), (2, "北京5"), (3, "深圳5")],
        initial=[1,3,]
    )
 
    f11 = fields.TypedMultipleChoiceField(
        choices=[(1, "上海5"), (2, "北京5"), (3, "深圳5")],
        initial=[1, 3, ],
        coerce=lambda x:int(x),
    )
 
    f12 = fields.FilePathField(path="app1",allow_folders=True,recursive=False,allow_files=)
 
# recursive:递归显示,true不显示,false显示
# allow_folders:是否显示文件夹
# allow_files:是否显示文件
 
    f13 = fields.GenericIPAddressField(
        protocol="both"
    )
 
    f13 = fields.SlugField()
    # 只允许数字,字母,下划线,减号

  

 

标签:form,fields,initial,label,表单,forms,choices,格式,Django
From: https://www.cnblogs.com/xingxia/p/django_forms.html

相关文章

  • 用Typescript 的方式封装Vue3的表单绑定,支持防抖等功能。
    Vue3的父子组件传值、绑定表单数据、UI库的二次封装、防抖等,想来大家都很熟悉了,本篇介绍一种使用Typescript的方式进行统一的封装的方法。基础使用方法Vue3对于表单的绑......
  • C# 桌面软件开发之超精简WinForm无边框方案(可靠边自动分屏)
    前言最近“解决自媒体一键多平台发布”项目立项以来,桌面端选择了WinForm进行开发(虽然丢了很多年,但总算多少了解点)。为了重绘标题栏、最大最小化按钮和关闭按钮,需要对WinF......
  • Transformer理解
    目录1、QKV作用?2、QKV的矩阵形状问题1、QKV作用?1、QKV都是输入经过线性投影获得,假设句子为"goodmorning,sir",句子有4个token;通过这4个token线性投影获得的QKV的embedin......
  • ICCV2021何恺明团队又一神作:Transformer仍有继续改善的空间
    计算机视觉研究院专栏作者:Edison_G一个简单、渐进、但必须知道的基线:用于VisionTransformer的自监督学习。尽管标准卷积网络的训练方法已经非常成熟且鲁棒,然而ViT的训练方......
  • django之五--获取url参数和name的作用
    一、前言假如我们要打开这两个地址:会发现这两个地址的最大差别就是时间参数的值是动态的(年和月的值是动态的)。那么,如果我们想要获取地址里面的【2018】和【07】这两个值,就......
  • django报错 'WSGIRequest' object has no attribute 'session'
    最新学python的django后台用到session,报错'WSGIRequest'objecthasnoattribute'session'开始以为是session问题,结果去掉session仍报类似'WSGIRequest'objecthasno......
  • 通过Python脚本在系统中操作django orm
    OK,话不多说直接上代码importosimportdjangoos.environ.setdefault('DJANGO_SETTINGS_MODULE','tunny.settings')#对应app下面的配置文件django.setup()#导......
  • pycharm 社区版运行Django项目的几种方式
    1、终端启动cd对应的Django项目路径,启动命令:pythonmanage.pyrunserver 2、pycharm工具的terminal启动,命令:pythonmanage.pyrunserver   3、pycharm......
  • application/x-www-form-urlencoded和application/json
    今天前端传递一个json,我用@RequestBody怎么都接不到这个参数一看请求头是application/x-www-form-urlencoded这个,这样的话,前端只能传递key-value形式的参数但是前端appli......
  • winform窗口不响应|不刷新处理
    winform主线程执行耗时操作或循环时,会导致窗口不响应,也看不到控件的更新:方案1:主线程中开启循环,耗时操作放在子线程中处理,控件在主线程中修改。privateasyncvo......