• day 55小结


    ORM查询优化

    only与defer

    ​ only括号内放字段 查询结果是一个列表套一个个的数据对象 这些数据对象点括号内的字段属性不会再查询数据库 直接就是对象获取属性 也支持点击括号内内有的字段 但是每次点击就会重新走一次数据库

    ​ defer与only是互为反操作
    ​ defer括号内放什么字段 查询出来的对象就没有该字段属性 如果你要点击 每点击一次就要重新走一次数据 而你点击了非括号内的字段 就不会走数据库 仅仅是对象属性的操作

    ​ select_related括号内只能放外键字段 并且外键字段的数据类型只能是一对多 或者 一对一 不能是多对多

    ​ 内部是自动连表操作 会将括号内外键字段所关联的表 与当前表自动拼接成一张表 然后将表中的数据一个个查询出来封装成一个个的对象

    ​ 这样做的好处就是跨表不需要重新走数据库了 减轻了数据库的压力

    ​ select_related括号内可以放多个外键字段 逗号隔开 会将多个外键字段关联的表与当前表全部拼成一张

    ​ perfetch_related内部是子查询

    ​ 会自动帮你按步骤查询多张表 然后将查询的结果封装到对象中

    ​ 给用户的感觉好像还是联表操作

    ​ 括号内支持传多个外键字段 并且没有类型限制
    ​ 特点: 每放一个外键字段 就会多走一条sql语句 多查询一张表

    ​ 耗时: 查询次数

    choices参数

    ​ 用户表
    ​ 性别
    ​ 在职状态
    ​ 学历
    ​ 婚否
    ​ ...

    ​ 上面这些字段可能性都是我们列举完全的
    ​ 存数字 取的时候按照提前

    第一个参数不一定是数字也可以是字符串

    只要你是

    MTV与MVC模型

    ​ django自称为MTV框架 本质其实还是MVC

    ​ MTV
    ​ M: models
    ​ T: templates
    ​ V: views

    ​ MVC
    ​ M: models
    ​ V: views
    ​ C: controllar 路由匹配

    Ajax简介

    ​ XML也是一门标记语言
    ​ 该语法应用场景:
    ​ 1.写配置文件
    ​ 2.可以写前端页面(odoo框架中 erp)
    ​ 每家公司都会有属于这家公司独有的内部管理软件
    ​ 专门用来开发企业内部管理软件 框架 odoo
    ​ odoo框架内部功能实现全部依赖于python2
    ​ 薪资计算

    ​ AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

    ​ 需求:

    ​ 页面上有三个input框
    ​ 前两个数数字 最后一个展示两者的和
    ​ 要求是页面不刷新

    ​ 我们在学的时候只学JQuery封装好的方法 不需要掌握原生js版本
    ​ 在使用的时候一定要先导入jQuery
    ​ 括号内记得手动输入一个大括号

    $.ajax({
    
    })
    

    ajax基本语法结构

    $.ajax({
        url:'',  // 数据提交的后端地址  不写就是往当前页面提交  也可以写后缀 也可以写全称  跟actions一样
        type:'post',  // 提交方式  默认是get请求
        data:{'i1':$('#d1').val(),'i2':$('#d2').val()},  // 提交的数据
        success:function (data) {  // 形参data就是异步提交之后后端返回结果
                                 $('#d3').val(data)  // 回调机制需要做的事情
                                }
    })	# 一旦你使用了ajax 必知必会三板斧都不再作用与页面 而是与data交互
    
    
    

    a标签href参数 get请求
    form表单 get/post
    ajax get/post

    get请求数据格式

    url?xxx=ooo&zzz=yyy
    

    前后端传输数据

    ​ 前后端传输数据编码格式:

    ​ 前后端交互是一个数据编码格式 针对不同的数据 后端会进行不同的处理

    request.POST
    request.FILES
    

    你只需要知道三种即可

    1.urlencoded
    2.formdata
    3.application/json
    

    form表单发送数据的编码格式

    Content-Type: application/x-www-form-urlencoded
    1.form表单默认的编码方式是urlencoded
    urlencoded所对应的数据格式
    username=jason&password=123
    django后端针对urlencoded数据 会自动解析并且帮你封装到request.POST中

    2.form表单发送文件 编码格式 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryhjKCHQHDmcE62iMQ
    针对formdata格式的数据 你在浏览器上是无法查看到

    ​ django后端只要你的数据满足urlencoded格式
    ​ username=jason&password=123
    ​ 就会自动帮你解析到request.POST中
    ​ 如果你是一个文件对象django后端也会自动识别帮你放到request.FILES中

    3.form表单无法发送json格式的数据 你要想法 你只能借助于ajax

    ajax发送数据的编码格式

    ajax能够发送三种格式数据
    1.urlencoded
    2.formdata
    3.application/json

    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    ajax默认的编码格式也是urlencoded 也就意味着后端django也是将数据解析到request.POST中

    ​ 在涉及到前后端交互的时候 你一定要做到数据的格式与编码格式一致

    ​ 数据是一种格式 请求头里面是另外一种格式

    Ajax如何传输json格式数据

    dumps stringify

    loads parse

    Content-Type: application/json
    {"username":"jason","password":"123"}

    django后端针对json格式的数据 不会做任何处理 数据怎么来的 只会原封不动的放到request.body中
    需要你自己手动处理

    $('#d1').click(function () {
        $.ajax({
            url:'',
            type:'post',
            contentType:'application/json',  # 1.注意点1
            data:JSON.stringify({'username':'jason','password':'123'}),  # 2.注意点2
            success:function (data) {
                alert(123)
            }
        })
    })
    

    Ajax如何传输文件数据(*********)

    借助于内置对象 new
    该对象即可以携带文件数据 同样也支持普通的键值对

     $('#d1').click(function () {
         // 先生成一个内置对象
         var MyFormData = new FormData();
         // 1. 先添加普通的键值
         MyFormData.append('username','jason');  // 添加了一组普通的简直对
         MyFormData.append('password','123');
         // 2. 添加文件数据
         MyFormData.append('myfile',$('#d2')[0].files[0]);  // 如何获取input框中文件对象$('#d1')[0].files[0]
         $.ajax({
             url:'',
             type:'post',
             data:MyFormData,  # 1
    
             // 发送文件必须要指定的两个参数
             contentType:false,  // 不适用任何编码  MyFormData对象内部自带编码 django后端能够识别  # 2
             processData:false,  // 不要处理数据  # 3
    
             success:function (data) {
    
             }
    
         })
     })
    

    序列化

    django内置模块serializers

    drf  django restframework 
    from app01 import models
    from django.core import serializers
    # 序列化目的  将数据整合成一个大字典形式 方便数据的交互
    def zzz(request):
    	user_queryset = models.User.objects.all()
    	# [{username:...,password:...,hobby:...,},{},{},{}]
    	# user_list = []
    	# for data in user_queryset:
    	#     user_list.append(
    	#         {'username':data.username,
    	#          'password':data.password,
    	#          'gender':data.get_gender_display(),
    	#
    	#          }
    	#     )
    	res = serializers.serialize('json',user_queryset)
    	return HttpResponse(res)
    
  • 相关阅读:
    尾递归
    博客搬家 --- CSDN
    sublime text 插件集锦
    chrome 常用插件集锦
    IntelliJ Idea 2017 免费激活方法
    Mac下Java JNI 调C
    webgl学习笔记五-纹理
    webgl学习笔记四-动画
    webgl学习笔记三-平移旋转缩放
    webgl学习笔记二-绘图多点
  • 原文地址:https://www.cnblogs.com/LZF-190903/p/11968488.html
Copyright © 2020-2023  润新知