标签:输入 创建 列表 参数 char 忘记 htm 多个 行数据
今日内容 :
今日习得了:1多对多三种创建方式
? 2.forms校验性组件
? 3.django settings源码
多对多创建有三种方法
? 第一种是全自动的,第二种是全手写的,第三种是半自动的
全自动就是
让django自动创建第三张表
这样的话,第三张表的拓展性会很差,但是真的很方便
全手写就是去掉manytomany那一条,然后靠自己的力量写出来
不过如果是自己写的就不支持orm的跨表查询了,但是里面的东西都可以自己定义
以上两种好像都不是很好,因此我们换别的方法,半自动,获取他们各自的长处,舍弃他们的短处
很简单,在manytomany后面加一些参数即可定义新的列表名
books = models.ManyToManyField(to=‘Book‘, through=‘Book2Author‘, through_fields=("authors","book"))
但是它任然不支持
add remove clear set
forms组件可以手动书写html代码获取用户输入
然后将数据传递给后端做数据校验
如果数据出错了会展示错误信息
然后如果我们要使用forms组件的话必须要提前写一个类
不过不要忘记导入模块
class MyForm(forms.Form):
# username字段 最少三位 最多八位
username = forms.CharField(max_length=8,min_length=3)
# password字段 最少三位 最多八位
password = forms.CharField(max_length=8,min_length=3)
# email字段 必须是邮箱格式
email = forms.EmailField()
校验数据页很简单哦
我们只要给写好的类传字典数据就行
这里我们来举个例子,首先我们定义一个表格
form_obj=views.MyForm({‘username‘:‘jason‘,‘password‘:‘12‘,‘email‘:‘123‘}})
然后通过is_valid()来判断输入的数据是否合法
如果有不合法通过errors来查看为什么不合法
cleaned_data可以看合法的数据
如果有个地方没有输入的话.报错的内容会变成this field is required
如果写多了,那是没问题的,只会校验它需要的参数
渲染标签
forms组件只会渲染输入的标签,如果要提交按钮或者选择按钮得我们自己手动添加
{{ form_obj.as_p }}这个会渲染所有input框
{{ form_obj.as_ul }}
{{ form_obj.as_table }}可是这些方法的封装程度太高了,很难修改
还有一种方法
{{ form_obj.username.label }}{{ form_obj.username }}
{{ form_obj.username.label }}{{ form_obj.password }}
{{ form_obj.username.label }}{{ form_obj.email }}
懒人克星,真的太长了,于是我就放弃使用这种了
因此我们使用第三只方法
{% for form in form_obj %}
{{form.lable}}{{form}}
前端的数据校验是那么的弱不禁风,稍微动一下手脚就能攻破,因此我们一般都是后端来进行数据校验
校验数据我们会在后端使用列表和validator
from django.core.validators import RegexValidator
validators=[
RegexValidator(r‘^[0-9]+$‘, ‘请输入数字‘), RegexValidator(r‘^159[0-9]+$‘, ‘数字必须以159开头‘
),
]
钩子函数HOOK
当你觉得上面所有的校验还不能满足的时候就该轮到钩子来治你了
在这个函数里面你可以写任意的校验代码
如果你想校验单个字段就使用局部钩子
想要校验多个字段就要使用全局钩子
光是这些还没完
要想添加其他的功能,你可以用
label initial required widget等
label对应input提示信息
initial 对应input框默认值
required 对应默认为true 可以控制是否必填
widge 可以给input框设定样式
标签:输入 创建 列表 参数 char 忘记 htm 多个 行数据
原文地址:https://www.cnblogs.com/jimGraymane/p/11979409.html