当前位置: 首页 > news >正文

Django——forms组件

Django——forms组件

forms组件:通过后端在Django中定义forms类,可以在 html 中动态的生成一个表单;检验用户提交的数据。

在应用中创建一个名为 :forms 的py文件

# 导入 forms 组件
from  django import forms# 自定义 forms 表单类 , 表单类必须继承 forms.Form
# 在 Django 的 forms 组件中没有提供按钮标签
class MyForm(forms.Form):# 定义表单标签属性# 在定义之后 , 渲染到 html 中是一个 label 和 input 标签username = forms.CharField(label='用户名')password = forms.CharField(label='密码')
def showforms(request):# 渲染表单:生成一个表单类对象 , 提交到 html 中if request.method == 'GET':# 生成一个空白的表单类对象forms = MyForm()else:# 但请求为 post 请求的时候 , 说明用户提交数据# 将数据传递该 form 组件(表单类接收的数据要是字典类型的数据)forms = MyForm(request.POST)res = '数据已提交'return render(request , 'index.html' , locals())
<body>
<form method="post">{% csrf_token %}{{ forms }}<input type="submit" value="注册">
</form>
<span>{{ res }}</span>
</body>

在模板中渲染自定义表单类

<form method="post">{% csrf_token %}<p>使用表格的样式渲染</p>{{ forms.as_table }}<p>使用段落的样式渲染</p>{{ forms.as_p }}<p>使用列表的样式渲染</p>{{ forms.as_ul }}<input type="submit" value="注册">
</form>

forms 组件提供的组件设置

# 自定义 forms 表单类 , 表单类必须继承 forms.Form
# 在 Django 的 forms 组件中没有提供按钮标签
class MyForm(forms.Form):# 定义表单标签属性# 在定义之后 , 渲染到 html 中是一个 label 和 input 标签username = forms.CharField(label='用户名')password = forms.CharField(label='密码',# 设置 password 文本框widget = forms.PasswordInput(),)# 邮箱email = forms.EmailField(label='邮箱')# 日期day = forms.DateField(label='日期',# 设置日历选项widget=forms.TextInput(attrs={'type':'date'}))# 选项框# choices 设置选项内容 , 内容要以元组类型设置gender = forms.ChoiceField(choices=((1,'女'),(2,'男'),(3,'未知')) , label='性别',# 设置选项框类型: 单选 RadioSelectwidget=forms.RadioSelect(),# 设置默认选项initial = 3)work = forms.ChoiceField(choices=((1,'学生'),(2,'搬砖'),(3,'退休')) , label='职业',# 设置选项框类型: 单选 Selectwidget=forms.Select(),# 设置默认选项initial = 3)hobby = forms.ChoiceField(choices=((1,'爬山'),(2,'唱歌'),(3,'跳舞'),(4,'rap'),(5,'跆拳道'),(6,'篮球')) , label='爱好',# 设置选项框类型: 多选 CheckboxSelectMultiplewidget=forms.CheckboxSelectMultiple(),# 设置默认选项initial = [2,6])subject = forms.MultipleChoiceField(choices=((1,'物理'),(2,'化学'),(3,'生物'),(4,'地理'),(5,'历史'),(6,'政治')) , label='科目',# 设置选项框类型: 多选 CheckboxSelectMultiplewidget=forms.CheckboxSelectMultiple(),# 设置默认选项initial = [1])xy = forms.CharField(label='阿宸要你写代码的协议',widget=forms.CheckboxInput())

forms 组件验证数据

class RegisterView(View):def get(self , request):return render(request , 'register.html')def post(self , request):# 数据给 forms 组件进行数据校验register_form = RegisterForm(request.POST)# 判断数据是否合法# is_valid 判断表单类中获取的数据校验是否合法,合法返回 True# register_form.errors 存放的就是数据的错误信息if register_form.is_valid():return HttpResponse('注册成功')else:return render(request , 'register.html' , locals())
# 数据验证
class RegisterForm(forms.Form):username = forms.CharField(max_length=10 , min_length=3,# 设置错误信息字典error_messages={'max_length' : '用户名长度超出','min_length' : '用户名长度不足','required' : '不允许为空'})password = forms.CharField(max_length=15 , min_length=6,error_messages={'max_length': '密码长度超出','min_length': '密码长度不足','required': '不允许为空'})password2 = forms.CharField(max_length=15 , min_length=6,error_messages={'max_length': '密码长度超出','min_length': '密码长度不足','required': '不允许为空'})# 验证数据使用钩子函数 , 钩子:自定义的校验规则# 局部钩子:给一个字段数据校验# 定义局部钩子的函数名称:clean_属性名def clean_username(self):# 勾取数据:获取到对应的属性数据data = self.cleaned_data.get('username')# 进行数据检验if not re.match(r'^[a-zA-Z0-9]{3,10}$' , data):# 添加异常信息# self.add_error(属性 , 错误信息)self.add_error('username' , '用户名不合法')# 把勾取到的数据返回回去return data# 全局钩子:过多个字段校验def clean(self):pwd1 = self.cleaned_data.get('password')pwd2 = self.cleaned_data.get('password2')if pwd1 != pwd2:self.add_error('password2', '两次密码不一致')return self.cleaned_data
<body>
{#  novalidate 关闭浏览器自动渲染 form 组件的错误信息 #}
<form method="post" novalidate>{% csrf_token %}<p>用户名:<input type="text" name="username"></p><span style="color:red;">{{ register_form.username.errors.0 }}</span><p>密码:<input type="password" name="password"></p><span style="color:red;">{{ register_form.password.errors.0 }}</span><p>确认密码:<input type="password" name="password2"></p><span style="color:red;">{{ register_form.password2.errors.0 }}</span><input type="submit" value="注册">
</form>
</body>

相关文章:

Django——forms组件

Django——forms组件 forms组件&#xff1a;通过后端在Django中定义forms类&#xff0c;可以在 html 中动态的生成一个表单&#xff1b;检验用户提交的数据。 在应用中创建一个名为 &#xff1a;forms 的py文件 # 导入 forms 组件 from django import forms# 自定义 forms …...

利用K8S Statefulset搭建Etcd集群 - PVC存储

概述 在测试过程中发现&#xff0c;直接使用本地存储&#xff0c;当节点机器损坏了&#xff0c;对应机器的etcd数据也丢失了&#xff0c;故而做了利用K8S PV&#xff0c;PVC以及NFS来存储数据的尝试&#xff0c;经过一番折腾&#xff0c;测试成功&#xff0c;博文记录&#xf…...

手撕算法-接雨水

描述 分析 i位置能积累的雨水量&#xff0c;等于其左右两边最大高度的最小值。为了能获取i位置左右两边的最大高度。使用动态规划。两个dp数组&#xff1a; leftMaxrightMax 其中 leftMax[i] 代表i位置左边的最大高度rightMax[i] 代表i位置右边的最大高度 初始状态&#x…...

探索AI大模型学习:理论基础、技术突破与未来挑战

在当今技术飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;大模型学习无疑是推动科技进步和创新的关键力量。AI大模型学习的核心在于通过训练大规模的数据集来提升模型的性能&#xff0c;使之能够更准确、更高效地完成各种任务&#xff0c;从而在多个领域中实现…...

Linux:点命令source

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 source命令用于读取一个文件的内容并在当前Shell环境&#xff08;包括交互式Shell或是非交互式Shell&#xff09;执行里面的命令。它被称为点命令是因为命令名source也可…...

iOS开发 - 转源码 - __weak问题解决

iOS开发 - 转源码 - __weak问题解决 在使用clang转换OC为C代码时&#xff0c;可能会遇到以下问题 cannot create __weak reference in file using manual reference 原因 __weak弱引用是需要runtime支持的&#xff0c;如果我们还只是使用静态编译&#xff0c;是无法正常转换的…...

【Linux基础】dash和bash简介

Dash&#xff08;Debian Almquist Shell&#xff09;和 Bash&#xff08;Bourne Again Shell&#xff09;是 Unix/Linux 系统中的命令行 shell&#xff0c;用于执行命令、管理文件系统、编写脚本等任务的工具。 一、Dash和Bash的区别&#xff1a; Bash&#xff08;Bourne Agai…...

精读《如何做好 CodeReview》

1 引言 任何软件都是协同开发的&#xff0c;所以 CodeReview 非常重要&#xff0c;它可以帮助你减少代码质量问题&#xff0c;提高开发效率&#xff0c;提升稳定性&#xff0c;同时还能保证软件架构的稳定性&#xff0c;防止代码结构被恶意破坏导致难以维护。 所以 CodeRevie…...

双指针(滑动窗口)-算法刷题

一.移动零&#xff08;. - 力扣&#xff08;LeetCode&#xff09;&#xff09; 算法思想 &#xff1a; 设置两个指针left,right&#xff0c;将数组分为三块[0,left]为不为0的元素&#xff0c;[left1,right-1]为0元素&#xff0c;[right,num.size()-1]为未扫描的区域&#xff0c…...

上位机图像处理和嵌入式模块部署(qmacvisual之ROI设定)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 ROI&#xff0c;全称是region of interest&#xff0c;也就是感兴趣区域。这里面一般分成两种情况&#xff0c;一种是所有的算法都依赖于这个ROI&a…...

银行监管报送系统介绍(五):金融统计数据大集中自动化报送系统——PBOC Report

人民银行金融统计数据大集中自动化报送系统&#xff08;简称PBOC Report&#xff09;&#xff0c;是基于现代计算机网络技术应用基础上&#xff0c;由人行总行设置金融统计数据服务器&#xff0c;建立的一个全国统一的金融统计数据库。 人行针对各银行存贷款、中间业务、网点人…...

常用中间件redis,kafka及其测试方法

常用消息中间件及其测试方法 一、中间件的使用场景引入中间件的目的一般有两个&#xff1a;1、提升性能常用的中间件&#xff1a;1) 高速缓存&#xff1a;redis2) 全文检索&#xff1a;ES3) 存日志&#xff1a;ELK架构4) 流量削峰&#xff1a;kafka 2、提升可用性产品架构中高可…...

ROS1通过rosbridge在局域网中控制turtle进行运动(PC和手机)

通过ROSbridge控制小海龟&#xff08;turtlesim&#xff09;的具体案例。使用一个简单的Python脚本通过通过局域网上连接上传ROSbridge服务器&#xff0c;并发送速度指令来控制小海龟的移动 功能包的结构如下&#xff1a; HTML文件的编写&#xff08;界面&#xff09; html用…...

MQ高级篇---消息可靠性

MQ的一些常见问题 后面内容基于springboot 2.3.9.RELEASE 消息可靠性 生产者确认机制 在publisher微服务中application.yml中添加 spring:rabbitmq:publisher-confirm-type: correlatedpublisher-returns: truetemplate:mandatory: true每个RabbitTemplate只能配置一个Return…...

SpringMVC | SpringMVC中的 “文件上传和下载”

目录: 一、文件上传1.1 文件上传“概述”1.2 文件上传“具体配置” :“前端”中配置“文件上传” ( type“file” 满足3个条件 )“后端”中配置“文件上传” ( 配置id为“CommonsMultipartResolver”的bean 配置“文件上传”的“约束条件” 通过“MultipartFile接口”参数接…...

JVM快速入门(2)HotSpot和堆、新生区、永久区、堆内存调优、JProfiler工具分析OOM原因、GC(垃圾回收)、JVM经典面试笔试题整理

5.6 HotSpot和堆 5.6.1 Hotspot 三种JVM&#xff1a; Sun公司&#xff0c;HotspotBEA&#xff0c;JRockitIBM&#xff0c;J9 VM&#xff0c;号称是世界上最快的Java虚拟机 我们一般学习的是&#xff1a;HotSpot 5.6.2 堆 Heap&#xff0c;一个JVM只有一个堆内存&#xff0c…...

我的风采——android studio

目录 实现“我的风采”页面要求理论代码生成apk文件 实现“我的风采”页面 要求 要求利用’java框架的边框布局实现“找的风采 ”页而&#xff0c;其中中间为你的生活照&#xff0c;左右和下面为按钮&#xff0c;上面为标签 理论 Java GUI编程是Java程序设计的重要组成部分…...

BMS设计中的短路保护和MOSFET选型(上)

电池管理系统&#xff08;BMS&#xff09;是一种能够对电池进行监控和管理的电子装备&#xff0c;是电池与用户之间的纽带。通过对电压、电流、温度以及SOC等数据采集&#xff0c;计算进而控制电池的充放电过程&#xff0c;主要就是为了能够提高电池的利用率&#xff0c;防止电…...

用go实现一个任务调度类 (泛型)

用go实现一个任务调度类 &#xff08;泛型&#xff09; 源码地址&#xff1a; https://github.com/robinfoxnan/BirdTalkServer/blob/main/server/core/workmanager.go 1.概述 实现了一个简单的任务管理系统&#xff0c;允许用户定义任务和工作者&#xff0c;并将任务分配给…...

ansible 管理工具以及常用模块

一、前期准备 1、安装 yum install ansible 如果yum源没有ansible&#xff0c;需要提前配置yum源&#xff1a; mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup wget -O…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

Axure零基础跟我学:展开与收回

亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...

linux设备重启后时间与网络时间不同步怎么解决?

linux设备重启后时间与网络时间不同步怎么解决&#xff1f; 设备只要一重启&#xff0c;时间又错了/偏了&#xff0c;明明刚刚对时还是对的&#xff01; 这在物联网、嵌入式开发环境特别常见&#xff0c;尤其是开发板、树莓派、rk3588 这类设备。 解决方法&#xff1a; 加硬件…...

旋量理论:刚体运动的几何描述与机器人应用

旋量理论为描述刚体在三维空间中的运动提供了强大而优雅的数学框架。与传统的欧拉角或方向余弦矩阵相比&#xff0c;旋量理论通过螺旋运动的概念统一了旋转和平移&#xff0c;在机器人学、计算机图形学和多体动力学领域具有显著优势。这种描述不仅几何直观&#xff0c;而且计算…...

【仿生机器人】刀剑神域——爱丽丝苏醒计划,需求文档

仿生机器人"爱丽丝"系统架构设计需求文档 一、硬件基础 已完成头部和颈部硬件搭建 25个舵机驱动表情系统 颈部旋转功能 眼部摄像头&#xff08;视觉输入&#xff09; 麦克风阵列&#xff08;听觉输入&#xff09; 颈部发声装置&#xff08;语音输出&#xff09…...