第四十七章:forn组件

Ajax发送json格式数据
  $.ajax({
            url:'',  // 不写默认朝当前页面所在的url地址提交
            type:'post',
            contentType:'application/json',
            data:JSON.stringify({'name':'jason','csrfmiddlewaretoken':'{{ csrf_token }}'}),
            success:function (data) {
                alert(data)
            }
        })
 
Ajax发送文件
 $('#d1').click(function () {
        // 如果用ajax发送文件 需要使用内置对象FormData
        var formData = new FormData();  // 生成一个内置对象
        // 内置对象formdata既可以传普通的键值对,也可以传文件
        formData.append('name','jason');  // 普通键值对
        formData.append('password','123');
        // 传文件
        var fileObj = $('#d2')[0].files[0];  // 先获取标签对象 转成原生js对象 通过内置的files方法拿到列表 然后去索引0拿到文件对象
        formData.append('myfile',fileObj);
        $.ajax({
            url:'',  // 不写默认朝当前页面所在的url地址提交
            type:'post',
            // 注意ajax在发送文件的时候 需要你手动指定两个特殊的参数
   
   
            contentType:false,  // 不要用任何编码 使用我formdata自带的编码即可
            processData:false,  // 浏览器不要处理我的数据 是什么就什么
                data:formData,
            success:function (data) {
                alert(data)
            }         })
    })
 
   
 
 
 
注册示例
 获取用户输入 后端判断用户输入的内容是否合法
 如果不合法前端渲染对应的错误信息
 
forms组件
 1.前端渲染展示页面 获取用户输入      >>> 渲染页面
 2.将数据发送给后端进行数据的合法性校验  >>> 数据校验
 3.将不合法的提示信息展示给用户看    >>> 展示提示信息  关于数据的校验
  1.前端
  2.后端
  数据的校验前端可以没有,但是后端一定要做!!!
  
 
 
 
 forms组件能够帮你完成上面的三个过程
  1.校验数据
   forms组件的校验数据的使用
   1.定义一个继承forms.Form一个类
    from django import forms
    class MyForm(forms.Form):
     username = forms.CharField(max_length=6)  # username最长只能是6位
     password = forms.CharField(max_length=8,min_length=3)  # password最长8位 最短3位
     email = forms.EmailField()  # email接受的数据必须符合邮箱格式
   2.给forms组件传参数 (字典的显示)
    obj = views.MyForm({'username':'egondsb','password':'12','email':'123@qq.com'})
   3.查看数据是否完全合法
    obj.is_valid()
   4.查看所有校验通过的数据
    obj.cleaned_data
    {'email': '123@qq.com'}
   5.查看所有没有通过的数据
    obj.errors
    """
    {
     'username': ['Ensure this value has at most 6 characters (it has 7).'],
     'password': ['Ensure this value has at least 3 characters (it has 2).']}
    """
  2.渲染标签
   forms组件只能帮你渲染 获取用户输入(输入框 选择框 下拉框...)的标签
   提交按钮也得自己写
   
   form表单取消前端校验功能
    <form action="" method="post" novalidate>
   
   forms组件当前端输入的信息不合法的时候 页面上的数据保留不会刷新  这样方便用户修改
   
  3.展示提示信息
   {% for foo in form_obj %}
            <p>
                {{ foo.label }}{{ foo }}
                <span>{{ foo.errors.0 }}</span>
            </p>
   {% endfor %}
  
  
  
  
 forms组件的钩子函数
  局部钩子
  全局钩子
  # 局部钩子
  def clean_username(self):
   # 用户名中不能有666
   username = self.cleaned_data.get('username')
   if '666' in username:
    self.add_error('username','光喊666是不行的')
   return username
  
  # 全局钩子
  def clean(self):
   # 获取密码和确认密码比对
   password = self.cleaned_data.get('password')
   confirm_password = self.cleaned_data.get('confirm_password')
   if not password == confirm_password:
    self.add_error('confirm_password','两次密码不一致')
   return self.cleaned_data
  
  
  
 
 
 
 
 
 django中测试脚本书写
 import os
 import sys  if __name__ == "__main__":
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day66.settings")
  import django
  django.setup()
   
  from app01 import models
  print(models.Userinfo.objects.all())
 
上一篇:Codeforces Round #702 (Div. 3) 题解


下一篇:数论整除——cf1059D