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详解的主要内容,如果未能解决你的问题,请参考以下文章

django框架基础-django的form表单-长期维护-20200113

Django基础之Form表单验证

Django基础十之Form和ModelForm组件

Django学习详解Django admin高级用法

Django学习详解Django admin高级用法

Django基础—— 19.Form