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 ...
随机推荐
- virtual安装linux
virtual直接在官网上下载即可. 下载iso的镜像文件.新建 ->设置创建 redhat 根据镜像文件选择需要创建的版本. 创建后运行,如果出现一直黑屏,需要查看电脑支持虚拟是否启动. 右C ...
- Pythagorean Triples 707C
Katya studies in a fifth grade. Recently her class studied right triangles and the Pythagorean theor ...
- java-部分精选面试题
JVM的类加载机制是什么?有哪些实现方式? 类加载机制: 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法去内,然后在堆区创建一个java.lang.Clas ...
- mysql decimal
可能做程序的人都知道,float类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理. 这样我们在存取货币值的时候自然遇到问题,我的defaul ...
- DO and DOES Reduction
DO and DOES Reduction Share Tweet Share Tagged With: DO and DOES Reductions ‘Do’ and ‘does’ can be r ...
- 学JS的心路历程 - PixiJS -基础(三)
今天我们来试着移动图片吧! 首先,一样先把图片放到PIXI的stage中: let app = new PIXI.Application({ width: 800, height: 600, back ...
- python基础学习 Day19 面向对象的三大特性之多态、封装
一.课前内容回顾 继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类.接口) 继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中. 单继 ...
- workerman 平滑重启
<?phpuse Workerman\Worker;use Workerman\Lib\Timer; require_once '../../web/Workerman/Autoloader.p ...
- JDK8中JVM堆内存划分
一:JVM中内存 JVM中内存通常划分为两个部分,分别为堆内存与栈内存,栈内存主要用运行线程方法 存放本地暂时变量与线程中方法运行时候须要的引用对象地址. JVM全部的对象信息都 存放在堆内存中.相比 ...
- Mesh.CombineMeshes
[Mesh.CombineMeshes] public void CombineMeshes(CombineInstance[] combine, bool mergeSubMeshes = true ...