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'})

猜你喜欢

转载自www.cnblogs.com/danhuangpai/p/10984420.html
今日推荐