zoukankan      html  css  js  c++  java
  • choice参数、MTV与MVC模型、Ajax

    choice参数、MTV与MVC模型、Ajax

    choice参数

    choice 参数应用场景
    用户性别
    用户学历
    用户工作状态
    客户来源
    ...
    示例:
    choices = (
    (1,'male'),
    (2,'female'),
    )    
    gender = models.IntegerField(choices=choices)
    # 就是把你想要的选择先写出来,放在一个对应的元祖里,优点就是使用起来更方便,减少代码冗余.
    
    # 调用的方法:
    from app01 import models
    user_obj = models.Userinfo.object.filter(pk=4).first()
    print(user_obj.username)
    
    print(user_obj.gender) #错误语法
    # 针对choices字段 如果你想要获取数字所对应的中文,你不能直接点字段
    # 固定句式    数据对象.get_字段名_display() 当没有对应关系的时候,该句式获取到的还是数字
    print(user_obj.get_gender_display())
    
    更多应用场景:
    record_choices = (
    ('checked', "已签到"),
    ('vacate', "请假"),
    ('late', "迟到"),
    ('noshow', "缺勤"),
    ('leave_early', "早退"),
    #你当然也不用非要用数字代替,其他的对应也可以
    )
    record = models.CharField("上课记录", choices=record_choices, default="checked")
    # 括号里的choices就等于你自己写的对应关系, 当然你也可以设置默认值.
     score_choices = ((100, 'A+'),
                     (90, 'A'),
                     (85, 'B+'),
                     (80, 'B'),
                     (70, 'B-'),
                     (60, 'C+'),
                     (50, 'C'),
                     (40, 'C-'),
                     (0, ' D'),
                     (-1, 'N/A'),
                     (-100, 'COPY'),
                     (-1000, 'FAIL'),
                     )
        score = models.IntegerField("本节成绩", choices=score_choices, default=-1)
    

    MTV与MVC模型(了解)

    django号称是MTV框架,其实他还是MVC框架
    MTV:
       M: models
       T: templtes
       v: views
    MVC:
       M: models
       V: views
       C: contronner(路由配置)
    

    Ajax

    同步异步:
       同步:提交任务之后,原地等待任务的返回结果,期间不做其他的事情
       异步:提交任务之后,不原地等待,直接执行下一个,任务的返回通过回调机制
       
    阻塞非阻塞:
        描述的程序的运行状态:
        就绪--运行--阻塞
        
    局部刷新:
        表示一个页面,不是整体刷新,而是页面的某个地方局部刷新
        
    Ajax是一门js的技术,是基于js开发的,但是用原生的js写代码的过于繁杂,我们用JQuery实现ajax
    
    Ajax最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容.
    (这一特点给用户的感受是在不知不觉中完成请求和响过程)
     
     
    

    Ajax示例

    1.展示一个前端页面,页面上有三个输入框, 前两个输入数字,点击按钮朝后端发送请求,在页面不刷新的情况下载第三个框显示前两个相加的结果.
    eg:
     <input type='text' id='t1'>+<input type='text' id='t2'>=<input type='text' id='t3'>
     <p><button id='b1'>计算</button></p>
     
     # 在按钮上触发点击事件.
     $('#b1').on('click', function(){
     // 朝后端提交post数据,写ajax
     $.ajax({
        // 1.往哪个地址发送数据
        url:'', //不写的话就默认当请地址
        // 2.请求的格式
        type:'post', //专门定制ajax发送的请求方式.
        // 3.发送什么数据
        data:{'t1':$('#t1').val(), 't2':$('#t2').val()}, 获取前两个输入框输入的内容
        // 4.异步提交的任务, 需要通过回调函数来处理
        success:function (data){ //data形参指代的就是异步提交的返回结果}
        // 通过DOM操作将内容渲染到标签内容上
        $('#t3').val(data)  // ,这里写data就是最后结果.
     })
     }
     
     def index(request):
          if request.is_ajax():  # 判断当前的请求是否是ajax,然后在判断是否是post请求.然后做逻辑处理.让获取到的两个数字相加. res的结果经过ajax的处理会直接展示在第三个框里.
               if request.method == 'POST':
                   t1 = request.POST.get('t1')
                   t2 = request.POST.get('t2')
                   res = int(t1) + int(t2)
                   return HttpResponse(res)
    

    Ajax传json格式的数据

    django后端针对json格式的数据,不会自动的帮你解析.会原封不动的给你放到request.body中,你可以手动处理,获取数据.
    
    后端手动处理
    json_bytes = request.body  #拿到jsoon格式数据,是二进制的
    json_str = str(json_bytes, encoding='utf8') # 转成utf8格式
    json_dict = json.loads(json_str) #拿到数据
    
    #注意点:
    1.指定contentType参数
         contentType: 'application/json', 传送json格式
    2.你要发送的数据也要确保是json格式的,确保一致.
         data:JSON.stringify({'username':'kang','password':'123'})
    

    Ajax传文件

    # ajax传文件需要利用内置对象 Formdata,该对象既可以传文件也可以传普通的键值
    
    # 获取input用户上传文件的文件的内容.
    1.先通过jquery查找到该标签 $('$t3')
    2.将jquery对象转换成原生的js对象$('$t3')[0]
    3.利用原生js对象的方法, 来直接获取文件的内容$('$t3')[0].files[0] 
    $('$t3')[0].files[0] 
    
    示例:
    $('#b1').on('click', function(){
    // 1.先生成一个formdata对象
    var myForData = new FormData();
    // 2.朝对象中添加普通的键值
    myForData.append('username', $("#t1").val());
    myForData.append('paasword', $("#t2").val());
    }
    // 3.朝对象中添加文件数据
         1.先通过jquery查找该标签
         2.将jquery对象转换成原生js对象
         3.利用原生js对象的方法,直接获取文件内容.
    myForData.append('myfile',$('#t3')[0].files[0]);
    $.ajax({
       url:'',
       type:'post',
       data:myForData, // 直接丢对象.
       // ajax传文件, 一定要指定两个关键性的参数
       contentType:false, // 不用任何编码 因为formdata对象自带编码,django能够识别对象.
       processData:false, // 告诉浏览器不要处理我的数据, 直接发就行.
       success:function (data) {
            alert(data)
       }
      })
    })
    
    ajax文件需要注意的事项.
      1.利用formdata对象 能够简单的快速传输数据(普通键值 + 文件)
      2.有几个参数
         data: formdata对象
         
         contentType:false
         processData:false
                                                              
    

    contentType前后端传输数据编码格式

    form表单 默认的提交数据的编码格式是urlencoded
      urlencoded
          1.username=admin&password=123这种就是符合urlencoded数据格式.
          
          2.django后端针对username=admin&password=123的数据格式会自定解析将结果打包给rquest.POST 用户只需要从request.POST即可获取对应的信息.
          
       formdata
          1.django后端针对formdata格式类型数据,也会自动解析
          2.但是不会针对request.POST中而是给你放到了request.FILES中
          
    总结: django后端针对不同的编码格式,会有不同的处理机制以及不同的获取该数据的方法.
    
    
    注意:前后端在做数据交互的时候,一定一定要表名你所发的数据格式到底是什么格式.
    
    序列化组件
    1.将用户表的数据 查询出来, 返回给前端(给前端的是一个大字典, 字典里的数据的一个个字段)
    from django.core import serializers #导入此模块可以直接把数据转成json类型
    def ser(request):
        user_queryset = models.Userinfo.object.all() #取出所有数据
        #[{},{},{},{}]
        user_list = [] # 定义一个空的列表
        for user_obj in user_queryset:  # 把值一个个取出来发到这个列表里
            user_list.append({
                'username':user_obj.username
                'password':user_obj.password,
                'gender':user_obj.get_gender_display(),
            })
            
        res = serializers.serialize('json',user_queryset) #变为json类型
        return render(request, 'ser.html', local()) #发送到前端.
            
    
    

    ajax + sweetalert的应用

    $("#b55").click(function () {
        swal({
                    title: "你确定要删除吗?",
                    text: "删除可就找不回来了哦!",
                    type: "warning",
                    showCancelButton: true,  // 是否显示取消按钮
                    confirmButtonClass: "btn-danger",  // 确认按钮的样式类
                    confirmButtonText: "删除",  // 确认按钮文本
                    cancelButtonText: "取消",  // 取消按钮文本
                    closeOnConfirm: false,  // 点击确认按钮不关闭弹框
                    showLoaderOnConfirm: true  // 显示正在删除的动画效果
                },
          
              function(){
                  var deleteId = 2;
                  $.ajax({
                     url:"/delete_book",
                     type:"post",
                     data:{"id":deleteId},
                     success: function (data){
                         if (data.code === 0){
                             swal("删除成功!", "success")
                         } else {
                             swal("删除失败", "error")
                         }
                     }
                  })
              }
    

  • 相关阅读:
    包导入基础知识
    怎么创建模块?
    reload基础
    重载模块概念及意义
    导入和作用域 #596
    属性名的点号运算
    模块命名空间
    from会存在潜在的陷阱
    如何通过from语句调用模块的变量名?
    如何调用模块的变量名?
  • 原文地址:https://www.cnblogs.com/kangwy/p/11761607.html
Copyright © 2011-2022 走看看