自我总结48

ORM查询优化

only与defer

only方法 返回的是一个queryset对象,本质就是列表套数据对象

该对象内只含有除了only括号内所指定的属性(其他属性也可以获取但是需要重新走数据库查询)

defer方法 only互为反关系

返回的是一个queryset对象,本质就是列表套数据对象

该对象内只含有除了defer括号内所指定的属性(其他属性也可以获取但是需要重新走数据库查询)

select_related

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

内部是自动连表操作 会将括号内外键字段所关联的表 与当前表自动拼成一张表 然后在执行查询操作

返回的结果是一个queryset对象,本质就是列表套数据对象

该数据对象获取当前表中的数据或者关联表中的数据 都不会再走数据库(至始至终只走一次数据库)

prefetch_related

括号内支持传多个外键字段 并且没有类型限制

内部是子查询 给用户的感觉还是连表操作

返回的结果是一个queryset对象,本质就是列表套数据对象

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

特点:每放一个外键字段 就会多走一条sql语句 多查询一张表

区别

第一个方法耗时主要耗在连表操作

第二个方法耗时主要耗在查询次数

MTV与MVC模型

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

MTV M:models T: templates V:views

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

Vue react

choices参数

用在一些字段数据是可以明确列出所有的可能的(第一个参数不一定是数字 也可以是字符串)

1.先提前定义好对应关系

2.在通过字段的choices参数来指定关系

	性别
	在职状态
	学历
	婚否

gender_choices = (
	(1,'male')
    (2,'famale')
	(3,'other')
)
gender = models,interferField(choices = gender_choices)
'''
该字段还是存储数字  并且范围没有限制
但是一旦存储的数据在你事先定义好的范围内,就会有查询方式
get_字段名_display()拿到对应的解释信息

'''

'''
如果存储的数字在我们提前定义好的关系中
如果存储的数字不在关系中又会怎样
能够正常存储
也能够正常取(数字)

'''

Ajax简介

异步的JavaScript和xml

1.异步提交
2.局部刷新

异步交互:不用等待后端响应,继续发送

最大优点:在不重新加载整个页面的情况下   可与服务器交换数据并更新部分页面
应用场景: GitHub注用户名实时查看用户名是否注册,不用刷新页面

XML

XML也是一门标记语言

该语法应用场景

	1.写配置文件

	2.可以写前端页面(odoo框架中)

每家公司都会有属于这家公司独有的内部管理软件

	专门用来开发企业内部管理框架  odoo

	odoo框架内部功能实现全部依赖于python2

ajax基本语法结构

# 前期准备
在使用的时候一定要先确保正常导入jQuery(JQuery封装好的方法 ,不需要掌握原生js版本)
括号内记得手动输入一个大括号
$.ajax({
   	...
		})
# 基本语法结构      
$.ajax({
				url:'',  // 数据提交的后端地址  不写就是往当前页面提交  也可以写后缀 也可以写全称  跟actions一样
				type:'post',  // 提交方式  默认是get请求
				data: // 提交的数据
				success:function (data) {  // 形参data就是异步提交之后后端返回结果
					// 回调机制需要做的事情
				}
			})

# 使用了ajax 三板斧都不再作用与页面 而是与data交互

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

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

request.POST

requset,FILES

例子:

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

ajax发送数据的编码格式

# 编码格式 (三种)
urlencoded
	form表单和ajax默认的编码方式都是urlencoded
	django后端针对urlencoded会自动解析并封装成request.POST

formdata
	form表单发送文件必须要指定的编码格式
    该编码既可以发送文件也可以发普通的键值对

application/json
	Ajax可以发送json格式的数据	form表单不支持
    
# 数据类型和编码格式保持一致性

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

1.form表单默认的编码方式是urlencoded
urlencoded所对应的数据格式:username=jason&password=123
django后端针对urlencoded数据 会自动解析并且帮你封装到request.POST中
	
    
2.form表单发送文件 编码格式 Content-Type: multipart/form-data;针对formdata格式的数据 你在浏览器上是无法查看到
				   
# urlencoded格式: username=jason&password=123
django后端只要你的数据满足urlencoded格式,就会自动帮你解析到request.POST中,如果你是一个文件对象django后端也会自动识别帮你放到request.FILES中
		
		
3.form表单无法发送json格式的数据  你要想发 你只能借助于ajax

Ajax传输json格式数据

# 新增一个参数
Content-Type: application/json
{"username":"jason","password":"123"}
		
# django后端针对json格式的数据 不会做任何处理 数据怎么来的 只会原封不动的放到request.body中,需要手动处理
		
		
$('#d1').click(function () {
$.ajax({
   url:'',
   type:'post',
   contentType:'application/json', 
   
    
  data:JSON.stringify({'username':'jason','password':'123'}),
    // 需要将数据序列化成json格式字符串
   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,  // 提交的数据
			// 发送文件必须要指定的两个参数
			contentType:false, 
            // 不指定任何编码  MyFormData对象内部自带编码 django后端能够识别 
			processData:false,  
            // 浏览器不要对数据处理
			success:function (data) {// 形参data就是异步提交之后后端返回结果
				// 回调机制需要做的事情
			}

		 })
})
// django能够识别对象中的普通键值对和文件对象,然后分别放到不同的方法 POST 和 FILES

序列化

drf  django restframework 
from app01 import models
from django.core import serializers
# 序列化目的  将数据整合成一个大字典形式 方便数据的交互
def zzz(request):
	user_queryset = models.User.objects.all()

	res = serializers.serialize('json',user_queryset)
	return HttpResponse(res)
posted @ 2019-12-03 04:31  jzm1201  阅读(83)  评论(0编辑  收藏  举报