标签:val 数据库 and 验证 input 自动生成 action 返回 约束
一 简介 今天咱们来聊聊 django强大的表单功能
二 分类
1 ModelFrom ModelFrom只需要声明指定字段,其他的选择继承
2 Froms (我们今天主要推这个)
1 Forms需要声明规定每个字段
2 forms.py文件 BaseForm,Form,DeclarativeFieldsMetaclass
3 froms.py继承了相关字段的属性,所以直接调用文件属性即可
三 Froms作用
1 自动生成HTML表单元素并且检查表单数据的合法性
2 数据类型转换(字符类型的数据转换成相应的Python类型)
四 内容
1字段定义2元数据定义3方法重写
五 表单方法
form=Form({})
1 form.is_valid():#验证表单数据是否合法,返回True/False
注意点 1 如果表单有多余的字段,只要相对应的字段符合要求,依然会返回True
2 form.errors:#输出的是带标签的含有错误内容的格式->字典
注意点
1 后端:取某个字段的错误信息 form.errors.get(‘key‘)[index]->这里要注意,可能会有多个错误信息
2 前端:取某个字段的错误信息 error.key.index配合<span>标签
3 后端返回前端的用法 return {error:form.errors}
4 常见报错类型 required,invalid
3 form.cleand_data:#获取表单数据->字典
注意点 1 cleaned_data中的值类型与字段定义的Field类型一致。
2 value=form.clean_data.get方式取值
3 数据存入 model.object.create(**form.cleand_data)
4 前端显示,会将forms标签自带约束校验自动生成label标签
1 form.as_p:#将表单渲染成P标签
2 form.key#取某个字段生成标签
五 字段控制相关
1 默认会自动创建主键,如果不指定
2 max/min_length 控制长度限制,CharFiled必须
3 required 需要默认值,默认不为空
4 error_messages 自定义错误 eg:error_messages={‘required/vaild‘: ‘Please enter your name‘}(实际并不常用),也可以独立建立字典变量
六 元数据
定义 class Meta类
db_table=‘‘在数据库中真正的表名称
七 示例代码
1 models模块
class User(models.Model):
user=models.CharField(max_length=5)
password=models.CharField(max_length=15)
email=models.CharField(max_length=12)
class Meta:
db_table=‘User‘
2 views模块
def register(request):
if request.method==‘POST‘:
biaodan=UserFrom(request.POST)
if biaodan.is_valid():
User.objects.create(**biaodan.cleaned_data)
return HttpResponse(‘wae‘)
else:
form=UserForm()
return render(request,‘register.html‘,locals())
else:
form=UserForm()
return render(request,‘register.html‘,locals())#locals带入本地变量
3 forms模块
class UserFrom(forms.Form):
user=forms.CharField(max_length=15,label=‘用户名‘,error_messages={"required":"用户名需要需要"})
password=forms.CharField(max_length=10,label=‘密码‘,widget=widgets.PasswordInput(attrs={‘class‘:‘form-control‘}))
email=forms.CharField(max_length=10,label=‘邮箱‘))
4 前端代码
渲染方法1
<form action="/register/" method="POST">
{% csrf_token %}
<div>
用户名: {{ form.user }}<span>{{ error.user }}</span>
</div>
<div>
密码: {{ form.password }}<span>{{ error.password }}</span>
</div>
<div>
邮箱: {{ form.email }}<span>{{ error.email }}</span>
</div>
<div>
<input type="submit" value="提交" />
</div>
</form>
渲染方法2
<form action="/register/" method="POST">
{% csrf_token %}
{% for filed in form %}
{% endfor %}
渲染方法3
<form action="/register/" method="POST">
{% csrf_token %}
{% for filed in form %}
<div class="form-row">
<label>{{ filed.label }}</label> //显示label字段说明
{{ filed }} //显示字段
{{filed.errors}}//显示错误信息
</div>
{% endfor %}
<input type="submit">
</form>
九 补充
1 两层验证机制 1 前端 2 forms表单
2 自定义约束前端显示属性 weight包
widget=widgets.type(attrs={‘class‘:‘form-control‘})
标签:val 数据库 and 验证 input 自动生成 action 返回 约束
原文地址:https://www.cnblogs.com/danhuangpai/p/10984420.html