首页 > 其他分享 >ORM操作与Ajax

ORM操作与Ajax

时间:2022-12-19 21:45:27浏览次数:43  
标签:obj models max Ajax ORM res print 操作

内容概要

  • Q查询进阶操作
  • ORM查询优化
  • ORM事务操作
  • ORM常用字段类型
  • ORM常用字段参数
  • ORM三种创建多对多的方式
  • Ajax请求

内容详细

Q查询进阶操作

form django.db.models import Q
q_obj = Q()  # 1.产生q对象
q_obj.connector = 'or'  # 默认多个条件的连接是and可以修改为or
q_obj.children.append(('pk',1))  # 2.添加查询条件
q_obj.children.append(('price__gt', 2000))  # 支持添加多个
res = models.Book.objects.filter(q_obj)  # 查询支持直接填写q对象
print(res)

ORM查询优化

1.ORM的查询默认都是惰性查询
2.ORM的查询自带分页处理
3.only与defer
	"""数据对象+含有指定字段对应的数据"""
	res = models.Book.objects.only('title','price')
	print(res)  # queryset [数据对象、数据对象]
	for obj in res:
    	print(obj.title)  # 点击括号内填写的字段 不走SQL查询
    	print(obj.price)
    	print(obj.publish_time)  # 可以点击括号内没有的字段获取数据但会走SQL查询
        
    res = models.Book.objects.defer('title', 'price')
    print(res)  # queryset [数据对象、数据对象]
    for obj in res:
        print(obj.title)  # 点击括号内填写的字段 走SQL查询
        print(obj.price)
        print(obj.publish_time)  # 点击括号内没有的字段获取数据 不走SQL查询
4.select_related与prefetch_related
	res = models.Book.objects.all()
    for obj in res:
        print(obj.publish.name)  # 每次查询都需要走SQL
    res = models.Book.objects.select_related('authors')  # 先连表后查询封装
    res1 = models.Author.objects.select_related('author_detail')
    # 括号内不支持多对多字段 其他两个都可以
    print(res1)
    for obj in res:
        print(obj.publish.name)  # 不再走SQL查询
	
    res = models.Book.objects.prefetch_related('publish')  # 子查询
    for obj in res:
        print(obj.publish.name)  # 实际操作和上面一样

ORM事务操作

"""
1.事务的四大特性(ACID)
	原子性、一致性、隔离性、持久性
2.相关SQL关键字
	start transaction;
	rollback;
	commit;
	savepoint;
3.相关重要概念
	脏读、幻读、不可重复读、MVCC多版本控制...
"""
django orm提供了至少三种开启事务的方式
	方式1:配置文件数据库相关添加键值对		全局有效
	"ATOMIC_REQUESTS": True每次请求所涉及到的orm操作同属于一个事务
	方式2:装饰器							局部有效
		from django.db import transaction
		@transaction.atomic	
		def index():pass
	方式3:with上下文管理					局部有效	
		from django.db import transaction
         def reg():
            with transaction.atomic():
                pass

ORM常用字段类型

AutoField
	primary_key=True
CharField
	max_length
IntegerField
BigIntergerField
DecimalField
	max_digits decimal_places
DateField
	auto_now auto_now_add
DateTimeField
	auto_now auto_now_add
BooleanField
	传布尔值自动存0或1
TextField
	存储大段文本
EmailField
	存储邮箱格式数据
FileField
	传文件对象 自动保存到提前配置好的路径下并存储该路径信息	

ORM还支持用户自定义字段类型
	class MyCharField(models.Field):
        def __init__(self, max_length, *args, **kwargs):
            self.max_length = max_length
            super().__init__(max_length=max_length, *args, **kwargs)
					
		def db_type(self, connection):
            return 'char(%s)' % self.max_length

	 class User(models.Model):
        name = models.CharField(max_length=32)
        info = MyCharField(max_length=64)

ORM常用字段参数

primary_kew      主键
verbose_name     注释
max_length       字段长度
max_digits       小数总共多少位
decimal_places   小数点后面的位数
auto_now         每次操作数据自动更新事件
auto_now_add     首次创建自动更新事件后续不自动更新
null             允许字段为空
default          字段默认值
unique           唯一值
db_index         给字段添加索引
choices          当某个字段的可能性能够被列举完全的情况下使用
	性别、学历、工作状态、...
	class User(models.Model):
        name = models.CharField(max_length=32)
        info = MyCharField(max_length=64)
        # 提前列举好对应关系
        gender_choice = (
            (1, '男性'),
            (2, '女性'),
            (3, '其他'),
        )
        gender = models.IntegerField(choices=gender_choice,null=True)
    user_obj = User.objects.filter(pk=1).first()
    user_obj.gender 
    user_obj.get_gender_display()

to               关联表
to_field         关联字段
on_delete        当删除关联表中的数据时
	1.models.CASCADE
    	级联操作,当主表中被连接的一条数据删除时,从表中所有与之关联的数据同时被删除
	2.models.SET_NULL
    	当主表中的一行数据删除时,从表中所有与之关联的数据的县官字段设置为null,此时注意定义外键时,这个字段必须可以允许为空
	3.models.PROTECT
    	当表中的一行数据删除时,由于从表中相关字段是受保护的外键,所以都不允许删除
	4.models.SET_DEFAULT
    	当主表中的一行数据删除时,从表中所有相关的数据的关联字段设置为默认值,此时注意定义外键时,这个外键字段应该有一个默认值
	5.models.SET()
    	当主表中的一条数据删除时,从表中所有的关联数据字段设置为SET()中设置的值,与models.SET_DEFAULT相似,只不过此时从表中的相关字段不需要设置default参数
    6.models.DO_NOTHING
    	什么都不做,一切都看数据库级别的约束,数据库级别的默认约束为RESTRICT,这个约束与django中的models.PROTECT相似

Ajax

异步提交 局部刷新
ajax不是一门新的技术并且有很多版本 我们目前学习的是jQuery版本(版本无所谓 本质一样就可以)


基本语法
	$.ajax({
        url:'',  // 后端地址 三种填写方式 与form标签的action一致
        type:'post',  // 请求方式 默认也是get
        data:{'v1':v1Val, 'v2':v2Val},  // 发送的数据
        success: function (args) {
            // 后端返回结果之后自动触发 args接收后端返回的数据
            $('#d3').val(args)
        }
    })

Content-Type

1.urlencoded
	ajax默认的编码格式、form表单默认也是
	数据格式  xxx=yyy&uuu=ooo&aaa=kkk
	django后端会自动处理到request.POST中
2.formdata
	django后端针对普通的键值对还是处理到request.POST中 但是针对文件会处理到request.FILES中
3.application/json
	form表单不支持 ajax可以
	<script>
	$('#d1').click(function(){
        $.ajax({
            url:'',
            type:'post',
            data:JSON.stringify({'name':'guts', 'age':22}),
            // 必须写对应的 不能写错
            contentType:'application/json',
            success:function(args){
                alert(args)
            }
        })   
    })
	</script>
	后端需要从request.body中获取并自己处理

ajax携带文件数据

<script>
	$('#d3').click(function(){
        // 1.先产生一个FormData对象
        let myFormDataObj = new FormData()
        // 2.往该对象中添加普通数据
        myFormDataObj.append('name', 'jason');
        myFormDataObj.append('age', 18);
        // 3.往该对象中添加文件数据
        myFormDataObj.append('file', $('#d2')[0].files[0])
        // 4.发送ajax请求
        $.ajax({
            url:'',
            type:'post',
            data:myFormDataObj,
            
            // ajax发送文件固定的两个配置
            contentType:false,
            processData:false,
            success:function(args){
                alert(args)
            }
        })
    })
</script>

标签:obj,models,max,Ajax,ORM,res,print,操作
From: https://www.cnblogs.com/DragonY/p/16993124.html

相关文章

  • Django-Ajax
    1.Ajax1.AJAX不是新的编程语言,而是一种使用现有标准的新方法,我们目前学习的是jQuery版本。2.AJAX最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并......
  • Django与Ajax
    Ajaxajax不是一门新的技术并且有很多版本,我们目前学习的是jquery版Ajax简介Ajax即AsynchronousJavascriptAndXML也就是异步JavaScript和XML异步:和同步对应Jav......
  • django之Q查询进阶、ORM查询优化、ORM事务、ORM常用字段类型和字段参数、Ajax介绍、数
    一、Q查询进阶操作这里主要就是让查询数据的时候,可以使用input获取的信息,进行用户交互。fromdjango.db.modelsimportQq_obj=Q()#1.产生q对象q_obj.connector=......
  • python之路52 ORMQ查询、ORM事务、查询优化、常用字段及参数、ajax方法
    Q查询进阶操作fromdjango.db.modelsimportQq_obj=Q()#1.产生q对象q_obj.connector='or'#默认多个条件的连接是and可以修改为orq_obj.children.append(('......
  • Ajax
    Ajax简介特点:异步提交,局部刷新ajax不是一门新的技术并且有很多版本,我们目前学习的jQuery版本(版本无所谓,本质都一样)基本语法 $.ajax({url:'' 填的是后......
  • 进入python的世界_day55_Django—ORM进阶操作、ORM事务、Ajax
    一、ORM进阶操作1.Q查询进阶Q查询还可以将查询的字段改为字符串形式q_obj=Q()q_obj.connector='or'#q对象默认是多个条件也是and关系可以修改为orq_obj.child......
  • AJAX(笔记07) - 原生AJAX - 请求超时、网络异常、取消请求和重复请求处理
    开发的产品上线后,难免会遇到请求超时或网络异常的情况,在客户端设置超时处理和异常提醒,可以提升用户体验。手动取消请求和取消重复发送请求,可以节省服务端资源;这篇,来实现这些......
  • c中字符串常见操作函数
    字符串处理函数:  #include<string.h>   字符串拷贝:      strcpy:         将src的内容,拷贝给dest。返回dest。保证dest空间足够大。......
  • Ajax
    Ajaxajax不是一门新的技术并且有很多版本,我们目前学习的是jQuery版本,各版本之间本质是一样的Ajax的特点是异步提交,局部刷新Ajax基本语法基本语法 $.ajax({ur......
  • ORM查询优化、ORM字段类型及参数、ORM事务操作
    ORM查询优化(重点)ORM事务操作ORM常用字段类型ORM常用字段参数ORM三种创建多对多的方式ORM查询优化(重点)1.ORM查询默认都是惰性查询'''获取的是数据......