ORM查询优化AJAX

ORM查询优化

only于defer

'''
only():括号内字符字段名,查询结果为返回列表套一个个数据对象	
		若想获取该字段的值时,将不会再进行数据库查询
		若获取的字段值不是括号内的字段名,则获取时将继续对数据库查询
		
		通过only括号内的字段名为准,若想获取的是该字段的的值,将直接返回,
		而获取的是其他字段的值则继续对数据库进行查找
		
defer():括号内字符字段名,查询结果为返回列表套一个个数据对象	
		若想获取该字段的值时,将会继续进行数据库的操作
		若获取的字段值不是括号内的字段名,则不会继续对数据库查询
		
		通过defer括号内的字段名为准,若想获取的是该字段的值,则继续对数据库进行查找
		若获取的不是该字段的值则直接返回值



'''
'''
select_related():括号内只能放外键字段,并且外键字段类型只能是一对多,一对一,不能多对多
				  内部是连表操作,会将括号内外键字段所有关联的表与当前表自动拼成一张表
				  然后将表中的数据一个个封装成一个个对象
				  好处:不需要重复的走数据库,减轻了数据库的压力
				  坏处:查询时先要连表,耗时在连表上
				  
prefetch_related():括号内支持传多个外键字段,并且没有类型限制
				  会自动帮你按步骤查询多张表,然后查询的结果封装到对象中
				  特定:每放一个外键字段就多走一条sql语句
				  坏处:查询时,有几个外键就查几次,耗时在次数上

'''

MTV与MVC模型

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

MTV:
	M:models
    T:templates
    V:views
MVC:
	M:models
    V:views
    C:controllar
    
Vue:前端非常乱,更新速度快,版本之间差距非常大

choices参数

class User(models.Model):
    username=models.CharField(max_lengtg=64)
    password=models.IntegerField()
    gender_choices=(
    (1,'男')
    (2,'女')
    (3,'其他')
    )
    gender=models.IntegerField(choice=gender_choices)
     # 该字段存数字
#     """
#     1.如果存储的数字在我们提前定义好的关系中会怎么样
#     2.如果存储的数字不在关系中又会怎么样
#         能够正常存储
#         也能够正常获取(数字)
#	 	  通过get_gender_block()获取值

Ajax简介

'''
XML也是一门标记语言
	该语法应用场景
		1.写配置文件
		2.可以写前端页面(odoo框架中 erp)
	每家公司都会有属于这家公司独有的内部管理软件
		1.专门用来开发企业内部管理软件 框架  odoo
		2.odoo框架内部功能实现全部依赖于python2
		3.薪资计算
		
Ajax:最大的有点时在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容
	 (这一特点给用户的感受是在不知不觉中完成请求和响应过程)
	 
'''

Ajax基本语法结构

'''
注意:
	1.在使用ajax的时候需要先导入jquery
	2.括号内记得手动输入一个大括号
	$.ajax({
	
	})

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

前后端传输数据编码格式

'''
前后端交互是一个数据编码格式 针对不同的数据后端会进行不同的处理
	request.POST
	request.flies
只需要知道三种即可
	1.urlencode
	2.fromdata
	3.application/json

from表达发送数据的编码格式
	Content-Type:application/x-www-from-urlencode
	1.form表达默认的编码方式是urlencode
		urlencoded所对应的数据格式:username=jason&password=123
		django后端针对urlencoded数据 会自动解析并且帮你封装到request.POST中
		
	2.form表达发送文件编码格式:
        Content-Type: multipart/form-data; 
        针对formdata格式的数据 你在浏览器上是无法查看到
        django后端只要你的数据满足urlencode格式
            username=jsano&password=123
            就会自动帮你解析到request.POST中
        如果你是一个文件对象django后端也会自动识别帮你放到request.FILES中
        
    3.form表单无法发送json格式的数据,但是可以借助ajax
    
ajax发送数据的编码格式
	ajax能够发送三种格式数据
		1.urlencode
		2.formdata
		3.application/json
	Content-Type: application/x-www-form-urlencoded; charset=UTF-8
	jax默认的编码格式也是urlencoded 也就意味着后端django也是将数据解析到request.POST中
	
	你在涉及到前后端交互的时候 你一定要做到数据的格式与编码格式一致
	千万千万不要骗人家  数据是一种格式  请求头里面是另外一种格式
'''

ajax如何传输json格数数据

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

 $('#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) {
					}

				})
    })

'''

序列化

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)
posted @ 2019-12-03 21:34  鸿鸿1  阅读(169)  评论(0编辑  收藏  举报