码迷,mamicode.com
首页 > 其他好文 > 详细

风嘶🔪

时间:2019-12-03 21:51:57      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:输入   创建   列表   参数   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}}


{% endfor %}

前端的数据校验是那么的弱不禁风,稍微动一下手脚就能攻破,因此我们一般都是后端来进行数据校验
校验数据我们会在后端使用列表和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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!