前后端数据传输的编码格式,Ajax提交json格式的数据,Ajax提交文件数据,AJax结合layer弹窗实现删除的二次确认,批量插入数据

发布时间 2023-08-08 14:54:21作者: 毓见

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

# 前后端数据传输的时候请求方式有2种:get post

我们不研究get请求的
url?a=1&b=2

# 我们只研究post请求的编码格式
三种编码格式:
urlencoded
form-data
json

# 可以通过哪些方式发送post请求
form表单
Ajax
postman

请求头中的Content-Type:参数
# 研究form表单发送post请求的时候数据的编码格式
默认提交编码格式是:application/x-www-form-urlencoded
它的数据格式是:username=dasdas&password=dasdas&gender=dasdas

# 针对application/x-www-form-urlencoded格式的数据,在Django后端是如何接收数据的
所以:Django后端针对符合urlencoded格式的数据,django把数据都封装到了request.POST中了


另外一种编码格式:multipart/form-data
# 编码格式从urlencoded改成form-data有什么效果?
form表单就可以提交文件数据了
它的数据格式又是什么样子的呢?
Content-Type:
multipart/form-data; boundary=----WebKitFormBoundary7iwnnLo3TDiHIAQz--->文件数据

# 针对multipart/form-data格式的数据,Django后端是如何接收数据的?
针对普通数据django把数据封装到了request.POST中
针对文件数据django把数据封装到了reuqest.FILES中

Ajax提交post请求的数据时候,编码格式又是怎样的?
# 默认的提交格式是:application/x-www-form-urlencoded; a=1&b=2
Django后端针对符合urlencoded格式的数据,django把数据都封装到了request.POST

Ajax提交json格式的数据

提交json格式的数据必须满足两个条件:
1. 你的编码格式必须是json格式的:contentType参数
2. 你的数据必须是json {"a":1}

# 针对json格式的数据,Django后端又是如何处理的?
针对ajax提交的json格式的数据,django后端不在把数据封装到request.POST中了

# 对于json格式的数据,django后端不在做任何的封装,数据是纯原生的,发送过来的数据是二进制形式的
# 我们自己来处理这些二进制数据

# js中序列化
JSON.stringify({'a': 1, b: 2})  ----------》{'a': 1, b: 2} 对象
contentType:'application/json',
    

# django后端接收json格式的数据
json_str = request.body.decode('utf-8')
print(json_str)  # {"a":1,"b":2}

json_data = json.loads(json_str)
print(json_data)  # {'a': 1, 'b': 2}
print(json_data.get('a'))

Ajax提交文件数据(重要)

var username = $("#username").val();
var password = $("#password").val();

// 文件数据
{#var myfile = $("#myfile")[0].files[0];#}
    var myfile= $("#myfile")[0].files[0];

    // 发送文件数据到后端需要借助于FormData对象
    var myFormDataObj = new FormData();
    myFormDataObj.append('username', username);
    myFormDataObj.append('password', password);
    myFormDataObj.append('myfile', myfile);


    $.ajax({
        url: '',
        type: 'post',
        data: myFormDataObj, // {}
        contentType:false, // 告诉浏览器不要做任何的编码格式处理,django自己来做处理
        processData:false, // 告诉浏览器不要对我处理的数据做任何的处理
        success: function (res) {
            {#console.log(res)#}
            }
        });

AJax结合layer弹窗实现删除的二次确认

# 我们使用第三方的UI弹窗:layer、sweetalert、
https://layuiweb.com/doc/element/form.html ----------> layui
    
    
https://layuiweb.com/layer/index.htm---------------->layer

批量插入数据

# 在django中批量插入数据
# for i in range(10000):
    #     models.UserInfo.objects.create(username='jerry_%s' % i)
    """为什么插入的数据很慢?"""
    # insert into userinfo values('jerry');
    # insert into userinfo values('jerry'), ('jerry_2'), (),('jerry'), ('jerry_2'), ();
    user_obj_list = []
    for i in range(100000):
        user_obj = models.UserInfo(username='jerry_%s' % i)
        user_obj_list.append(user_obj)
        print('jerry_%s' % i)

    '''开始操作数据库'''
    models.UserInfo.objects.bulk_create(user_obj_list)