首页 > 其他分享 >Django组件之form组件

Django组件之form组件

时间:2023-01-01 20:33:07浏览次数:37  
标签:username obj form 校验 Django forms 组件

目录

Django组件之form组件

一、form组件

1.自动校验数据
2.自动生成标签
3.自动展示信息
from django import forms


class MyForm(forms.Form):
    username = forms.CharField(min_length=3, max_length=8)  # username字段最少三个字符最大八个字符
    age = forms.IntegerField(min_value=0, max_value=200)  # 年龄最小0 最大200
    email = forms.EmailField()  # 必须符合邮箱格式

校验数据的功能(初识)

form_obj = views.MyForm({'username':'jason','age':18,'email':'123'})
    form_obj.is_valid()  # 1.判断数据是否全部符合要求 只要有一个不符合结果都是False
    form_obj.cleaned_data  # 2.获取符合校验条件的数据
    {'username': 'jason', 'age': 18}
    form_obj.errors  # 3.获取不符合校验规则的数据及原因
    {'email': ['Enter a valid email address.']}
1.只校验类中定义好的字段对应的数据 多传的根本不做任何操作
2.默认情况下类中定义好的字段都是必填的

二、forms组件渲染标签

方式1(封装程度过高 扩展性差 主要用于本地测试)

{{ form_obj.as_p }}
{{ form_obj.as_ul }}
{{ form_obj.as_table }}

方式2(封装程度过低 扩展性高 编写麻烦)

{{ form_obj.username.label }}
{{ form_obj.username }}
{{ form_obj.age.label }}
{{ form_obj.age }}
{{ form_obj.email.label }}
{{ form_obj.email }}

方式3(封装程度较高 扩展性高 编写简单 推荐使用)

{% for form in form_obj %}
    <p>
        {{ form.label }}
        {{ form }}
    </p>
{% endfor %}
# 注意事项
forms组件之负责渲染获取用户数据的标签 也就意味着form标签与按钮都需要自己写
前端的校验是弱不禁风的 最终都需要后端来校验 所以我们在使用forms组件的时候可以直接取消前端帮我们的校验
<form action="" novalidate>

三、forms组件展示信息

def ab_forms_func(request):
    # 1.产生一个空对象
    form_obj = MyForm()
    if request.method == 'POST':
        # request.POST可以看成是一个字典直接传给forms类校验字典中无论有多少键值对都没关系只在乎类中编写的
        form_obj = MyForm(request.POST)
        if form_obj.is_valid():  # 校验数据是否合法
            print(form_obj.cleaned_data)
        else:
            print(form_obj.errors)
    # 2.将该对象传递给html文件
    return render(request, 'formsPage.html', locals())
{% for form in form_obj %}
            <p>
                {{ form.label }}
                {{ form }}
                <span>{{ form.errors.0 }}</span>
            </p>
{% endfor %}
# 错误信息提示的语言环境修改方式1:简单粗暴,直接在配置文件中修改语言环境
from django.conf import global_settings  django内部真正的配置文件
# 错误信息提示的语言环境修改方式1:自定义内容 给字段对象添加errors_messages参数
username = forms.CharField(min_length=3, max_length=8, label='用户名',
                           error_messages={
                               'min_length': '用户名最少三个字符',
                               'max_length': '用户名最多八个字符',
                               'required': '用户名不能为空'
                           }
                           )

四、forms组件校验补充

forms组件针对字段数据的校验 提供了三种类型的校验方式(可以一起使用)

第一种类型:直接填写参数 		  max_length
第二种类型:使用正则表达式	     validators	
第三种类型:钩子函数			   编写代码自定义校验规则

钩子函数>>>:校验的最后一环 是在字段所有的校验参数之后触发

# 局部钩子:每次只校验一个字段数据 校验用户名是否已存在
def clean_username(self):
        username = self.cleaned_data.get('username')
        if username == 'jason':
            self.add_error('username', '用户名jason已存在')
        return username
# 全局钩子:一次可以校验多个字段数据 校验两次密码是否一致
def clean(self):
        password = self.cleaned_data.get('password')
        confirm_pwd = self.cleaned_data.get('confirm_pwd')
        if not password == confirm_pwd:
            self.add_error('confirm_pwd', '两次密码不一致')
        return self.cleaned_data

五、forms组件参数补充

min_length			最小字符
max_length			最大字符
min_value			最小值
max_value			最大值
label			    字段注释
error_messages		错误提示
validators			正则校验器
initial				默认值
required			是否必填
widget				控制标签的各项属性

六、modelform组件

# modelform组件是forms组件的强化版本 更好用更简单更方便!!!

from django import forms
from app01 import models


class MyModelForm(forms.ModelForm):
    class Meta:
        model = models.UserInfo
        fields = '__all__'
        labels = {
            'username':'用户名'
        }


def ab_mf_func(request):
    modelform_obj = MyModelForm()
    if request.method == 'POST':
        modelform_obj = MyModelForm(request.POST,instance=User_obj)
        if modelform_obj.is_valid():
            modelform_obj.save()  # models.UserInfo.objects.create(...)/update(...)
        else:
            print(modelform_obj.errors)
    return render(request, 'modelFormPage.html', locals())

标签:username,obj,form,校验,Django,forms,组件
From: https://www.cnblogs.com/almira998/p/17018549.html

相关文章

  • 问题:django中对datetime类型数据在pycharm中sqlite3进行修改时,修改后datetime日期数据
    这是正在修改的  提交完之后  问题原因是sqlite数据库对日期类型不敏感,Pycharm直接插入会变成图中这样的时间戳,用POST请求添加数据或Django自带的后台管理插入不......
  • Pytorch入门实战(5):基于nn.Transformer实现机器翻译(英译汉)
    ​​使用GoogleColab运行(openInColab)​​​​源码地址​​文章目录​​本文涉及知识点​​​​本文内容​​​​环境配置​​​​数据预处理​​​​文本分词与构造词......
  • 【无标题】常见框架:Django框架<全能型框架MTV>
    第一课django环境搭建前言Web框架:url,请求对象,响应对象,模板引擎常见框架:Django框架<全能型框架MTV>/Web.py/flask框架<已经停止维护>/Tornado<facebook维护>Web应用框架......
  • Django自定义分页器
    目录Django自定义分页器一、分页器思路二、自定义分页器的使用Django自定义分页器一、分页器思路分页器主要听处理逻辑代码最后很简单推导流程 1.queryset支持切片......
  • 第一节课django环境搭建
    第一课django环境搭建前言Web框架:url,请求对象,响应对象,模板引擎常见框架:Django框架<全能型框架MTV>/Web.py/flask框架<已经停止维护>/Tornado<facebook维护>Web应用框架......
  • Django模型层
    目录模型层与ORM一、初步认识ORM二、ORM常用关键字三、ORM查询SQL语句的方法四、神奇的双下划线查询五、ORM外键字段创建1.ORM外键字段创建理论铺垫2.ORM外键字段创建相关......
  • winform 导航栏
     搞习惯了B/S的,想把winform的主页面搞成一个类似web网站主页的,首先左侧要有一个导航栏,这个对于winform来说好像难度有点大了,连直接拖拽的控件都没有,如果用TreeView的话,......
  • winform 登录
      最近一直在搞winform,对于我一个经常搞B/S的开发者来说,还是学一下的。不得不说这个winform的原始控件时真的丑,对于我一个用惯了前端框架的人来说时真的难受。我拖拽了......
  • spring出现依赖关系形成循环问题,The dependencies of some of the beans in the appli
    出现这个问题大多使用的springboot都是在2.6.x以上,springboot在2.6.x就将依赖循环禁用了,解决方式有以下几种: 解决方式: 1、第一种解决方式:可以优化自己程序的逻辑,优......
  • Django——全局配置settings详解
    Django设置文件包含你所有的Django安装配置。这个文件一般在你的项目文件夹里。比如我们创建了一个名为mysite的项目,那么这个配置文件setting.py就在项目里的mysite文件夹......