Django框架Form组件之渲染错误信息
1365 字
7 分钟
Django框架Form组件之渲染错误信息
- 1纯手撸Web框架
- 2Python框架初识
- 3Django框架初识
- 4Django框架安装
- 5Django框架入门之小白必会三板斧
- 6Django便捷函数shortcuts
- 7Django框架入门之静态文件
- 8Django的静态文件
- 9Django框架入门之request对象
- 10Django框架入门之ORM操作
- 11Django框架之生命周期流程图
- 12Django框架之路由层
- 13Django框架之视图层
- 14Django框架之模板层
- 15Django框架之模型层
- 16图书管理系统
- 17Ajax基础操作
- 18Ajax进阶操作
- 19JS确认插件补充
- 20Django框架之序列化组件serializers
- 21Django框架之批量插入数据
- 22Django框架补充之分页器推导
- 23Django框架之Form组件
- 24Django框架Form组件之常用字段及插件
- 25Django框架Form组件之渲染HTML代码
- 26Django框架Form组件之渲染错误信息本文
- 27Django框架Form组件之钩子函数(Hook)
- 28Django框架Form组件之源码
- 29Django框架Form组件之模型表单ModelForm
- 30Django表单API详解
- 31Django框架之Cookie和Session
- 32Django框架之会话session补充
- 33Django框架之CBV添加装饰器的三种方式
- 34Django框架之中间件引入
- 35Django框架之中间件思想
- 36Django框架之csrf跨站请求
- 37Django框架之auth模块
- 38Django框架之settings源码
- 39Django框架之settings配置
- 40Django框架之settings核心配置项
- 41RBAC权限系统
- 42前端基础之URL编码
【一】定义form组件
- forms.py
# 定义form类class MyForm(forms.Form): # username : 字符串类型 最小三位,最大八位 username = forms.CharField(max_length=8, min_length=3, label="用户名", error_messages={ "max_length": "最大八位", "min_length": "最小三位", "required": "必填字段", }) # # username : 字符串类型 最小三位,最大八位 : 字符串类型 最小三位,最大八位 password = forms.CharField(max_length=8, min_length=3, label="密码", error_messages={ "max_length": "最大八位", "min_length": "最小三位", "required": "必填字段", }) # email : 必须符合邮箱格式 xxx@xx.com email = forms.EmailField(label="邮箱", error_messages={ "invalid": "格式不正确", "required": "必填字段", })- views.py
def index(request): # (1)产生一个空对象 form_obj = MyForm() # (2) 直接将空对象传递给前端页面
# (3) 获取前端输入的信息,校验并返回结果 if request.method == "POST": # 获取前端输入的信息 ''' 数据获取繁琐 校验数据需要构造成字典格式传回 ps:request.POST 可以看成是字典数据的格式 ''' # 校验并返回结果 form_obj = MyForm(request.POST) # 判断数据是否合法 if form_obj.is_valid(): # 合法操作数据库存储数据 return HttpResponse("OK") else: # 数据不合法 -- 展示错误信息给前端 pass
return render(request, 'index.html', locals())【二】Form组件自带的
- 注意上面的例子中,我们使用{{ form.name_of_field.errors }}模板语法,在表单里处理错误信息。
- 对于每一个表单字段的错误,它其实会实际生成一个无序列表,参考下面的样子:
<ul class="errorlist"> <li>Sender is required.</li></ul>- 这个列表有个默认的CSS样式类errorlist,如果你想进一步定制这个样式,可以循环错误列表里的内容,然后单独设置样式:
{% if form.subject.errors %} <ol> {% for error in form.subject.errors %} <li><strong>{{ error|escape }}</strong></li> {% endfor %} </ol>{% endif %}- 一切非字段的错误信息,比如表单的错误,隐藏字段的错误都保存在{{ form.non_field_errors }}中,上面的例子,我们把它放在了表单的外围上面,它将被按下面的HTML和CSS格式渲染:
<ul class="errorlist nonfield"> <li>Generic validation error</li></ul>【三】遍历渲染错误信息
【1】自定义前端模板
<form action="" method="post"> {% for field in form_obj %} <div class="fieldWrapper"> {{ field.errors }} {{ field.label_tag }} {{ field }} {% if field.help_text %} <p class="help">{{ field.help_text|safe }}</p> {% endif %} </div> {% endfor %} <p><input type="submit"></p></form>【2】自动生成前端标签
<form action="" method="post">
<div class="fieldWrapper">
<label for="id_username">用户名:</label> <input type="text" name="username" maxlength="8" minlength="3" required="" id="id_username">
</div>
<div class="fieldWrapper">
<label for="id_password">Password:</label> <input type="text" name="password" maxlength="8" minlength="3" required="" id="id_password">
</div>
<div class="fieldWrapper">
<label for="id_email">Email:</label> <input type="email" name="email" required="" id="id_email">
</div>
<p><input type="submit"></p></form>- 下表是{{ field }}中非常有用的属性,这些都是Django内置的模板语言给我们提供的方便:
| 属性 | 说明 |
|---|---|
| {{ field.label }} | 字段对应的label信息 |
| {{ field.label_tag }} | 自动生成字段的label标签,注意与{{ field.label }}的区别。 |
| {{ field.id_for_label }} | 自定义字段标签的id |
| {{ field.value }} | 当前字段的值,比如一个Email字段的值someone@example.com |
| {{ field.html_name }} | 指定字段生成的input标签中name属性的值 |
| {{ field.help_text }} | 字段的帮助信息 |
| {{ field.errors }} | 包含错误信息的元素 |
| {{ field.is_hidden }} | 用于判断当前字段是否为隐藏的字段,如果是,返回True |
| {{ field.field }} | 返回字段的参数列表。例如{{ char_field.field.max_length }} |
【四】禁止浏览器做校验
- 浏览器自动帮我们做数据校验,但是前端的校验不安全
- 如何禁止浏览器做校验?
- 在form表单中加入参数即可
<form action="" method="post" novalidate>【1】自定义前端模板
<form action="" method="post" novalidate> {% for form in form_obj %} <p> {{ form.label }} : {{ form }}</p> <span style="color: red">{{ form_obj.errors }}</span> {% endfor %} <p><input type="submit"></p></form>【2】自动生成前端标签
<form action="" method="post" novalidate="">
<p> 用户名 : <input type="text" name="username" maxlength="8" minlength="3" required="" id="id_username"></p> <span style="color: red"></span>
<p> Password : <input type="text" name="password" maxlength="8" minlength="3" required="" id="id_password"></p> <span style="color: red"></span>
<p> Email : <input type="email" name="email" required="" id="id_email"></p> <span style="color: red"></span>
<p><input type="submit"></p></form>【五】不可见字段
- 很多时候,我们的表单中会有一些隐藏的不可见的字段,比如honeypot。
- 我们需要让它在任何时候都仿佛不存在一般,比如有错误的时候,如果你在页面上显示了不可见字段的错误信息,那么用户会很迷惑,这是哪来的呢?
- 所以,通常我们是不显示不可见字段的错误信息的。
- Django提供了两种独立的方法,用于循环那些不可见的和可见的字段,hidden_fields()和visible_fields()。
- 这里,我们可以稍微修改一下前面的例子:
{# 循环那些不可见的字段 #}{% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %}{# 循环可见的字段 #}{% for field in form.visible_fields %} <div class="fieldWrapper"> {{ field.errors }} {{ field.label_tag }} {{ field }} </div>{% endfor %}【六】注意事项
【1】必要条件
- get 请求 和 post 传给页面对象变量名必须一样
def index(request): # (1)产生一个空对象 form_obj = MyForm() # ******这里的变量名 # (2) 直接将空对象传递给前端页面
# (3) 获取前端输入的信息,校验并返回结果 if request.method == "POST": # 获取前端输入的信息 ''' 数据获取繁琐 校验数据需要构造成字典格式传回 ps:request.POST 可以看成是字典数据的格式 ''' # 校验并返回结果 form_obj = MyForm(request.POST) # ******这里的变量名 # 判断数据是否合法 if form_obj.is_valid(): # 合法操作数据库存储数据 return HttpResponse("OK") else: # 数据不合法 -- 展示错误信息给前端 pass
return render(request, 'index.html', locals())【2】forms 组件
- 当你的数据不合法的情况下,会记录上一次的数据,基于上一次的数据再编辑
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
C 语言发展史
编程语言了解 C 语言从 BCPL、B 语言到现代标准 C 的发展历程、核心特点与应用领域。
2
C 语言开发环境的安装与配置
编程语言在 Windows、Linux 与 macOS 上安装 C 工具链,配置编辑器,并编译运行第一个 C 程序。
3
C 语言初识:程序运行机制与基本结构
编程语言认识 C 程序从源代码到运行的完整流程,以及基础语法和程序的基本结构。
4
C 语言基础:注释、关键字、变量与数据类型
编程语言学习 C 语言的注释、关键字、标识符、常量、变量和基本数据类型等基础知识。
5
C 语言数据类型
编程语言理解 C 语言的数据类型体系,包括基本类型、整数类型、浮点类型和逻辑类型。
随机文章随机推荐














