Django中的forms一些小点
1、默认情况下,chrom浏览器会提前对我们的form表单中的数据做校验,如果不想让chrom浏览器给我们做校验,则只需要按照下面的方式处理就可以了
<form method="post" action="/app1/test_forms/" novalidate>
关键是这个属性novalidate
2、forms中的as_p方法介绍
{{ myform.as_p }}
{# as_p:这个方法的意思是把form中所有的input标签用p标签包裹起来#}
3、forms中的errors方法介绍
{{ myform.errors.pwd.0 }}
{# errors:这里有forms中的所有的字段的所有错误#}
{# errors.pwd:这里有forms中的pwd字段的所有的错误#}
{# errors.pwd.0:这里取pwd所有字段的第一个错误#}
4、为text输入框设置插件的方法
# text输入框的设置属性
name = forms.CharField(max_length=16,label="username",widget=widgets.TextInput(attrs={"class":"c1"}))
5、利用插件,设置password输入框的方法
# 密码输入框设置属性
pwd = forms.CharField(label="pwd",min_length=6,error_messages={"min_length":"密码不能少于6位",},widget=widgets.PasswordInput(attrs={"class":1},render_value=True))
这里有一个render_value的方法意思是如果密码校验不通过,也不会把输入框清空,默认情况下,PasswordInput框会清空校验不通过的密码
6、后端的cleaned_data方法介绍
def test_forms(request):
if request.method.lower() == "post":
myform = Myform(request.POST)
# 把post方式传递过来的数据传递个myform对象
if myform.is_valid():
# 对前端发过来的数据做校验,如果合法的话
name = myform.cleaned_data.get("name")
pwd = myform.cleaned_data.get("pwd")
rep_pwd = myform.cleaned_data.get("rep_pwd")
print(myform.cleaned_data)
else:
pass
else:
myform = Myform()
return render(request,"form1.html",{"myform":myform})
7、为forms生成的input设置bootstrap的样式

8、在forms中自定义正则表达式
from django.core.validators import RegexValidator
mobel = forms.CharField(
label="手机号",
max_length=11,
min_length=11,
validators=[RegexValidator(r'^\d+',code="111"),
RegexValidator(r'^139\d{8}$',code="222")],
error_messages={
"111":"必须是全数字",
"222":"必须是129开头",
"required":"不能为空",
}
)
9、如果在forms中的choice中的数据需要从数据库中获取数据,可以使用values_list方法
class City(models.Model):
name = models.CharField(max_length=64,unique=True)
def __str__(self):
return self.name
上面是models中的代码,下面是forms中如何去数据库中拿数据
city = forms.CharField(
initial=2,
label="城市",
widget=widgets.SelectMultiple(choices=models.City.objects.all().values_list("id","name"))
)
主要是这里,用values_list方法

通过上面的方法,我们就可以从数据库中获取数据,然后放到choices中
但是上面的写法有一个缺点,如果django开启了,这个时候数据库中有新增加数据,则不会把新的数据渲染到前端,我们可以在forms的类中重写init方法
class Myform(forms.Form):
# text输入框的设置属性
name = forms.CharField(max_length=16,label="用户名",widget=widgets.TextInput(attrs={"class":"c1"}))
# 密码输入框设置属性
pwd = forms.CharField(label="密码",min_length=6,error_messages={"min_length":"密码不能少于6位",},widget=widgets.PasswordInput(attrs={"class":1},render_value=True))
rep_pwd = forms.CharField(label="确认密码", min_length=6, error_messages={"min_length": "密码不能少于6位", },
widget=widgets.PasswordInput(attrs={"class": 1}, render_value=True))
mobel = forms.CharField(
label="手机号",
max_length=11,
min_length=11,
validators=[RegexValidator(r'^\d+',code="111"),
RegexValidator(r'^139\d{8}$',code="222")],
error_messages={
"111":"必须是全数字",
"222":"必须是129开头",
"required":"不能为空",
}
)
city = forms.CharField(
initial=2,
label="城市",
widget=widgets.SelectMultiple(choices=models.City.objects.all().values_list("id","name"))
)
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.fields["city"].widget.choices = models.City.objects.all().values_list("id","name")
重点是这里

这样就可以解决数据库中有数据新增,前端也可以拿到最新的数据
10、forms中的单选框,多选框使用诀窍
# ChoiceField(Field)
# 渲染select标签,这种主要是渲染的自定义的列表,不需要从数据库中获取数据,和数据库无关系 # ModelChoiceField(ChoiceField)
# 渲染select标签,这种主要是渲染从数据库中获取数据,用queryset这个属性从数据库中获取queryset对象,name的值是主键,value是__str__方法打印的值,和数据库有关系 # ModelMultipleChoiceField(ModelChoiceField)
# 渲染一个多选的select的标签,这种主要是渲染从数据库中获取数据,用queryset这个属性从数据库中获取queryset对象,name的值是主键,value是__str__方法打印的值,和数据库有关系 # 三个选择框的关系如上
Django中的forms一些小点的更多相关文章
- django中的forms组件
form介绍 用户需要向后端提交一些数据时,我们常常把这些数据放在一个form表单里,采用form标签,里面包含一些input等标签把用户的数据提交给后端. 在给后端提交数据的时候,我们常常也需要对于 ...
- django中的forms组件(权限信息校验,增删改查)
1.用处 1.用户请求数据验证 2.自动生成错误信息 3.打包用户提交的正确信息 4.如果其中有一个错误了,其他的正确,则保留上次输入的内容 5.自动创建input标签并可以设置样式 6.基于form ...
- Django中的自定义过滤器
一.为什么要自定义Django中的自定义过滤器:Django中提供了很多内置的过滤器和标签,详见链接django官网,主要有以下几个: autoescape(自动转义)block(模板继承)csrf_ ...
- Django框架的forms组件与一些补充
目录 一.多对多的三种创建方式 1. 全自动 2. 纯手撸(了解) 3. 半自动(强烈推荐) 二.forms组件 1. 如何使用forms组件 2. 使用forms组件校验数据 3. 使用forms组 ...
- Django中的ORM框架使用小技巧
Django中的ORM框架使用小技巧 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Django对各个数据提供了很好的支持,包括PostgreSQL,MySQL,SQLite ...
- 将keras模型在django中应用时出现的小问题——ValueError: Tensor Tensor("dense_2/Softmax:0", shape=(?, 8), dtype=float32) is not an element of this graph.
本文原出处(感谢作者提供):https://zhuanlan.zhihu.com/p/27101000 将keras模型在django中应用时出现的小问题 王岳王院长 10 个月前 keras 一个做 ...
- 「Python-Django」Django中使用数据库的 9 个小技巧
Django 中使用数据库的 9 个小技巧. 1. 过滤器聚合 在 Django 2.0 之前,如果你想得到“用户总数”.“活跃用户总数”等信息时,你不得不使用条件表达式. Django 2.0 中, ...
- Django中的Model(操作表)
Model 操作表 一.基本操作 # 增 models.Tb1.objects.create(c1='xx', c2='oo') #增加一条数据,可以接受字典类型数据 **kwargs obj = m ...
- Django:Django中的ORM
一.Django项目使用MySQL数据库 1,在Django项目的settings.py,文件中,配置数据库连接信息: DATABASES = { "default": { &qu ...
随机推荐
- 使用CLR Function代替T-SQL函数,优化检索效率
前言: 在使用存储过程查询数据中,T-SQL字符串拆分函数效率低下,这个时候我们可以采用CLR Function代替T-SQL函数,使用DLL执行字符串分解过程,并返回值到SQL中.测试复杂运行的速度 ...
- 打开Delphi 10.2提示脚本错误的解决方法
HKEY_CURRENT_USER\SOFTWARE\Embarcadero\BDS\18.0\Known IDE Packages $(BDS)\Bin\CommunityToolbar240.bp ...
- Firebird日期时间操作
最近在使用Firebird数据做 一项目,使用FireBird边用边学.(以下转贴) 查询2007年度以后的,12月份以上的数据记录,datetime为timestamp字段 select * fro ...
- Mysql数据库如何创建用户
创建test用户,密码是1234. MySQL u root -p CREATE USER 'test'@'localhost' IDENTIFIED BY '1234'; #本地登录 CREATE ...
- [Shell]Bash基本功能:输入输出重定向
/*----------------------------------------------------------------------------------------------- @黑 ...
- 让Hibernate和触发器协同工作
Sql Server触发器和hibernate一起使用时经常报类似如下错误 Batch update returned unexpected row count from update [0] ...
- Jsp基本语法 第二节
关于JSP的声明 即在JSP页面定义方法或者变量: <%!Java代码%> 在JSP页面中执行的表达式:<%=表达式%> 这个里尤其注意不能以:结束 JSP页面生命周期 ...
- 面图层拓扑检查和错误自动修改—ArcGIS案例学习笔记
面图层拓扑检查和错误自动修改-ArcGIS案例学习笔记 联系方式:谢老师,135_4855_4328,xiexiaokui#139.com 数据源: gis_ex10\ex01\parcel.shp, ...
- windows和linux下如何远程获取操作系统版本和主机名
远程获取windows和linux操作系统版本和主机名需要具备以下条件: 假设 主机A(windows 7),ip:192.168.12.2 主机B(centos 6.3),ip:192.168.12 ...
- fengsuo
IP地址特定端口封锁 原理: 配合上文中特定IP地址封锁里路由扩散技术封锁的方法进一步精确到端口,从而使发往特定IP地址上特定端口的数据包全部被丢弃而达到封锁目的,使该IP地址上服务器的部分功能无法在 ...