• choice参数以及ajax


    on the day
    聚合查询

    ​ from django.db.models import Max,Min,Sum,Count,Avg

    ​ 需要关键字才能触发,aggregate

    分组查询

    ​ 关键字,annotate

    ​ models.点什么,就是按什么分组

    F与Q查询

    ​ from django.db.models import F,Q

    ​ F 能够帮助你获取表中字段所对应的数据

    eg:models.Book.objects.filter(kucun_gt=F('maichu'))
    

    ​ Q 与或非

    eg:models.Book.objects.filter(Q(title='python'),Q(price=666))
    eg:models.Book.objects.filter(Q(title='python')|Q(price=666))
    eg:models.Book.objects.filter(~Q(title='python')|Q(price=666))
    

    ​ Q进阶

    q = Q()
    q.connector = 'or'
    q.children.append(('title','python'))
    q.children.append(('title_icontains','python'))
    q.children.append(('price',666))
    models.Book.objects.filter(q)
    默认是and关系
    
    django开启事务操作
    from django.db import transaction
    try:
    	with transaction.atomic():
    except BaseException as e:
    	print(e)
    加入try用来防止报错,with语句下面缩进的属于同一事物,退出缩进则表示退出事物    
    
    推荐人工智能方向网站

    ​ 百度AI,图灵机器人,科大讯飞

    常见字段参数

    ​ AutoField()设置主键

    ​ DateField()

    ​ DateTimeField(auto_now/auto_add_now)

    ​ TextField()

    ​ EmailField()数据库对顶varcahr(256)

    ​ BooleanField()传布尔值,0,1

    ​ is开头的字段名一般为布尔值

    自定义char字段
    class MyCharDield(models.Field):
        def db_type(self,connection):
        return 'char(%s)'%self.max_length
    
    orm查询优化

    ​ only

    ​ defer

    ​ 获取的是对象,

    ​ select_related

    ​ peretch_related

    ​ 连表,不用走数据库

    图书管理系统

    ​ 书籍增删改查

    Today
    choice参数

    ​ get_gender_display()

    ​ 针对choice字段,获取对应中文,不能直接点字段

    ​ 固定句式 数据对象.get_字段名__display()

    ​ 当没有对应关系的时候,该句式获取的还是数字

    ​ 当我们存的某一字段名时,如果它的值是有限的,我们就可以用choice参数

    eg:性别
    choices(名字自定义) = ((1,'male'),(2,'female'),(3,'others'))
    gender = models.IntegerField(choices=choices)
    

    ​ 这个时候存性别值存的是数字 ,就算没有对应关系也是可以存的,

    ​ 取值,choice字段,对象取值只能取到数字,它有独特的取值方式

    比如性别存在用户表中
    user_obj.gender
    指挥获得1.2.3.
    user_obj.get_gender_display()
    获取male等
    choice字段取值固定句式;get_字段名_display()
    可以设置默认值,设置为存的数值
    eg:gender = models.IntegerField(choices=choices,default=1)
    
    MTV与MVC模型

    ​ django号称是MTV框架,其实还是MVC框架

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

    ​ MVC:,M;models V;views C;contronner(路由匹配)

    ajax

    一门js技术,基于原生js开发的,但是原生的js代码过于繁琐,只学习jQuery实现ajax

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

    ​ 特点:

    ​ 异步提交

    ​ 同步异步任务的提交方式(同步,提交任务之后,原地等待任务的返回结果,期间不干任何事 异步,提交任务后不等待直接执行写一行代码,返回的任务通过回调机制),

    ​ 阻塞非阻塞,程序的运行状态(程序运行的三种状态图)

    ​ 局部刷新

    ​ 页面的某个地方局部刷新,

    eg:展示一个前端页面  页面上有三个输入框  前两个框输入数字 点击按钮朝后端发请求页面不刷新的情况下 完成数字的加法运算  
    <input type='text' id='t1'>+<input type='text' id='t2'>=<input type='text' id='t3'>    
    <p><button id='b1'>计算</button></p>
    $.ajax({
    //1.想哪里发送数据
    url:'',//专门控制向后端提交数据的地址,不写默认当前地址
    //2.到底发送什么请求
    type:'post',//专门定制ajax发送的请求方式
    //3.发送的数据到底是什么
    date:{'t1':$('#t1').val(),'t2':$('#t2').val()}
    //4.异步提交的任务,需要通过回调函数来处理
    success:function(data){//data形参代指的就是异步提交的返回结果
    //通过DOM操作将内容渲染到标签内容上
    $('#t3').val(data)}
    })
    

    ​ ajax传json数据

    ​ django后端针对json数据,不会解析,放在request.body中

    ​ 也可以手动处理

    手动处理方式,json反序列化
    json_bytes = request.body
    json_str = str(json_bytes,encoding='utf-8')
    json_dict = json.loads(json_str)
    

    ​ 注意事项:1.指定contentType参数 contentType:'application/json',2.确保数据json格式 data:JSON.stringify({}),

    ​ ajax传文件

    ​ 需要利用内置对象Formadata

    ​ 该对象既可以传普通键值对,也可以穿文件

    ​ 获取用户上传的文件的内容

    ​ 1.先通过jQuery查找到该标签,2.将jQuery对象转换成原生的js对象,3.利用原生js对象的方法,直接获取文件内容$('#3').files[0]

    ​ 上传:

    ​ 创建formdata对象

    ​ append(),加入上传文件

    ​ 注意事项:

    ​ contentType:false

    ​ processDatafalse

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

    ​ form表单 默认提交方式urlendoded

    ​ urlencoded

    ​ xxx=xxx&xxx=xxx

    ​ django后端针对这种数据格式自动解析,打包给request.POST

    ​ formdata

    ​ 也会解析,不过不会放在request.POST,而是放在request.FILES中

    ​ ajax默认提交方式urlencoded

    ​ 总结:django后端针对不同的编码格式,会有不同的处理机制以及不同的获取该数据点的方法

    ​ 前后端数据交互时一定要表名自己发的什么格式

    ​ 序列化组件,

    ​ 将用户表数据查询出来传给前端,给前端的是一个大字典,字典里面数据的一个个字段

    from django.core import serializers
    def ser(request):
    user_queryset = models.Userinfo.objects.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)
    print(res)
    return render(request,'ser.html',locals())
    

    ​ 使用ajax交互的时候,可以考虑给前端

    ajax+sweetalter
  • 相关阅读:
    寒假自学进度十四
    2020.2.14
    2020.2.13
    寒假自学进度十三
    2020.2.12
    软件架构实践阅读笔记1
    一线架构师实践指南阅读笔记03
    一线架构师实践指南阅读笔记02
    python作业5
    一线架构师实践指南Refined Architecture阶段阅读笔记
  • 原文地址:https://www.cnblogs.com/jiann/p/11753155.html
Copyright © 2020-2023  润新知