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 ...
随机推荐
- windows7 安装虚拟机,xsheel连接不上的问题,记录一下
安装了好久,一直连接不上...,原来是网络没开..重新安装设置就可以了!!!记录一下
- ejs 用到的语法
1.ejs 服务端渲染模板 2.语法: 01. <%= 变量名 %> -原样输出,不解析标签 02. <% js代码 %> 03. <%- 变量名%> -解析标签 ...
- Linux命令:history
显示历史(执行过的)命令. history [n] history -c history -d offset history -anrw [filename] history -p arg [arg ...
- 重建redo文件
需求背景 由于前期安装oracle时redo文件大小或者路径规划不合理需要进行修改,以便满足性能测试要求.redo文件规划大小建议与生产环境一致. 重做日志相关数据字典 1.v$log 记录数据库中 ...
- Oracle数据库安装指南
文档使用声明 1.安装指导仅限测试环境(非生产环境)安装使用,生产环境oracle数据库建议按公司要求安装. 安装环境 1.SuSE10/SuSE11(64位) + Oracle11gR2 工具和安装 ...
- [jQ/PHP]使用JS数组储值的两种情况(提交PHP处理)
---------------------------------------------------------------------------------------------------- ...
- 移动端取消touch高亮效果
在做移动端页面时,会发现所有a标签在触发点击时或者所有设置了伪类 :active 的元素,默认都会在激活状态时,显示高亮框,如果不想要这个高亮,那么你可以通过css以下方法来禁止: .xxx{ -we ...
- ArcGIS模型构建器案例教程-批量修改工作空间所有要素类的空间参考
ArcGIS模型构建器案例教程-批量修改工作空间所有要素类的空间参考 目的:批量修改工作空间所有要素类的空间参考(坐标系) 工具名称:WorkspaceChangeSpatialReference 使 ...
- 吴裕雄 python 机器学习-Logistic(1)
import numpy as np def loadDataSet(): dataMat = [] labelMat = [] fr = open('D:\\LearningResource\\ma ...
- 升级tensorflow1.0到1.3,报错ImportError: libcudnn.so.6: cannot open shared object file: No such file or directory Failed to load the native TensorFlow runtime.
先定位问题,发现在 /usr/local/cuda/include/ /usr/local/cuda/lib64/ 下面只有 libcudnn.so.5 因此,只要下载cudnn6.*版本的文件分别覆 ...