django 基础知识 ~ forms详解
Posted danhuangpai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 基础知识 ~ forms详解相关的知识,希望对你有一定的参考价值。
一 简介 今天咱们来聊聊 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‘)
以上是关于django 基础知识 ~ forms详解的主要内容,如果未能解决你的问题,请参考以下文章