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
posted @ 2019-10-28 16:25  ZJJJJJJJ  阅读(205)  评论(0编辑  收藏  举报