首页 > 其他分享 >Django之ajax

Django之ajax

时间:2023-05-04 21:11:37浏览次数:29  
标签:list json Django ajax book 格式 数据

Django之ajax

前后端传输数据的编码格式(理论篇)

"""
	只研究post请求的编码格式,get不研究
	url?username=xxx&password=yyy,这就是get提交的
"""
form表单能够2种:
	1. urlencoded
    2. form-data
# json格式的数据form表单无法提交

能够提交json的格式有:
	1. ajax
    2. 第三方工具:postman
    
form表单提交数据的编码格式:
	1. 默认是urlencoded(显示为application/x-www-form-urlencoded)
    # 对于urlencoded格式的数据,django后端都会给封装到request.POST中取
    2. 也可手动修改为form-data(显示为multipart/form-data)
    # 改完后可以提交文件数据,普通数据还是和urlencoded一样,但是文件数据都封装到request.FILES中
    
ajax默认的提交格式是:Content-Type: application/x-www-form-urlencoded
django后端也是把数据都封装到了request.POST中

ajax提交json格式的数据

ajax提交json格式的数据:
	1. content-type必须是:json(默认是urlencoded)
    2. 传输的数据必须是json格式的
    # ajax提交的json格式数据,django后端没有把数据封装到request.POST中
    在Django后端使用request.body,可以获取ajax提交的json格式的数据
    # 针对ajax提交的json格式数据,django后端没有做任何的封装,纯原生数据,在request.body中,需要我们自己手动处理数据格式

# 使用如下    
$.ajax({
            url: '',
            type: 'post',
           	data: JSON.stringify({'a': 1, 'b': 2, c: 3}),  # 2
            // 更改contenttype
    
    		contentType:'application/json',  # 1
            success: function () {

            }
        })

ajax提交文件数据

var myfile = $("#myfile")[0].files[0];  # 获取文件数据
# ajax提交文件数据,需要借助于form-data
var myFormDataObj = new 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, // 告诉浏览器不要给我修改任何的编码格式
            processData:false,// 告诉浏览器不要对我的数据进行任何的修改或者干扰
            success: function () {

            }
        })
"""
	总结:
       1. var myFormDataObj = new FormData();
       2. 获取数据,然后添加到myFormDataObj
            myFormDataObj.append('password', password);
            // 提交文件数据、
            myFormDataObj.append('myfile', myfile);
       3. 修改参数:
            contentType: false, // 告诉浏览器不要给我修改任何的编码格式
            processData:false,// 告诉浏览器不要对我的数据进行任何的修改或者干扰
       4. 在django后端,普通数据还是在request.POST中,文件数据在
            request.FILES里面
"""

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

# 1. 学会如何使用第三方工具-------》去看人家写的文档,根据文档把工具学会使用就行
https://layuiweb.com/layer/index.htm

django自带的序列化组件(了解)

# 让你从数据库总查询几条数据,然后序序列化给到前端,列表套字段的形式[{},{},{}]
from django.core import serializers
def ab_ser(request):
    user_list = models.Book.objects.all()
    # print(user_list) # <QuerySet [<Book: Book object (2)>, <Book: Book object (3)>, <Book: Book object (4)>]>
    # book_list = []
    # for obj in user_list:
    #     tmp = {
    #         'pk':obj.pk,
    #         'username':obj.username,
    #     }
    #     book_list.append(tmp)
    book_list = serializers.serialize('json', user_list)  # 了解
    return JsonResponse(book_list,safe=False)

批量插入数据

# 让你往book表插入10000条数据

select * from app01 limit 1,500  # 第一页
select * from app01 limit 501,1000  # 第二页
select * from app01 limit 1001,1500  # 第三页


# select * from app01
select * from app01 limit 99501,100000 # 最后一页
    from app01 import models

    # for i in range(10000):
    #     models.Book.objects.create(username='%s' % i)

    book_list = []
    for i in range(100000):
        book_obj = models.Book(username='%s' % i)
        book_list.append(book_obj)
    # book_list     一次插入多条数据 insert into table (username) values(1,'kevin'),(1,'kevin'),(1,'kevin'),(1,'kevin'),(1,'kevin'),(1,'kevin')
    models.Book.objects.bulk_create(book_list)
    # 不管数据有多大,只要不去查库,效率都可以忽略,
    '''以后再实际项目中,能够一次操作数据库完成的动作,就要尽量使用一次性的,'''

标签:list,json,Django,ajax,book,格式,数据
From: https://www.cnblogs.com/juzixiong/p/17372509.html

相关文章

  • Django内置序列化组件(drf前身)和批量操作数据加上分页器
    目录一、django内置序列化组件(drf前身)这里的内置序列化组件,其实就是实现将后端数据,存放到字典中或是存放到列表中有序输出。方式一这里是我们用JsonResponse模块自己实现的代码'''前后端分离的项目视图函数只需要返回json格式的数据即可'''fromapp01importmodelsfr......
  • Django之模型层(二) Q查询进阶 ORM查询优化 ORM事务 ORM常用字段类型和字段参数 多对
    目录一、Q查询进阶操作这里主要就是让查询数据的时候,可以使用input获取的信息,进行用户交互。fromdjango.db.modelsimportQq_obj=Q()#1.产生q对象q_obj.connector='or'#默认多个条件的连接是and可以修改为orq_obj.children.append(('pk',1))#2.添加查询条件......
  • django批量插入数据bulk_create
    场景django项目有个接口是插入多条数据,大概是50条数据吧,大概用了3s左右,10条数据为一组,插入不同的数据表中。3s对于这个接口来说是比较频繁的操作,所以3s是不能容忍的。目前一直是使用的create的方法,百度了解到有一种批量插入的方法bulk_create。使用之后,接口响应时间稳定在1s左......
  • Q查询优化,ORM查询 常用字段参数类型,AJax携带文件数据
    Q查询进阶操作fromdjango.db.modelsimportQq_obj=Q()#1.产生q对象q_obj.connector='or'#默认多个条件的连接是and可以修改为orq_obj.children.append(('pk',1))#2.添加查询条件q_obj.children.append(('price__gt',2000))#支持添加多个res=models.Bo......
  • Django--数据库迁移命令
    数据库迁移命令我这里用的是Django3.2版本,mysql8.0版本1.我们的模型类需要写在应用下的model.py文件中#Createyourmodelshere.classUser(models.Model):#idintprimarykeyauto_incrementuuid=models.AutoField(primary_key=True)#注意要这个prim......
  • Django--orm介绍
    djangoORM简介"""ORM:对象关系映射"""orm目的就是为了能够让不懂SQL语句的人,通过python面向对象的知识点也能够轻松自如的操作数据库类》》》表对象 》》》 表里面的数据对象点属性》》》字段对应的值#缺点:sql封装死了,有......
  • Django如何更换默认的数据库?
    问题:Django默认的sqlite3不好用。如何更换呢?解决:第一步:配置文件在setting中--更改databaseDATABASES={#'default':{#'ENGINE':'django.db.backends.sqlite3',#'NAME':BASE_DIR/'db.sqlite3',#......
  • django-channel 配置 channel layer 添加redis的账号和密码
    最近公司要使用django-channel搭建socket, 文档:https://channels.readthedocs.io/en/stable/introduction.html文档里面并没有写如果redis有账号和密码的话,怎么配置。配置方法:https://github.com/django/channels/issues/164#issuecomment-220513297如下:CHANNEL_LAYERS......
  • Django--request里面都有什么
    1.打个断点,调试运行。2.查看内容 3.POST里面都有什么?ifrequest.method=="POST":#获取用户提交的数据#print(request.POST)#<QueryDict:{'username':['123'],'password':['233']}>当成dict字典处理即可......
  • Django--基础登录的表单
    HTML页面关键代码<formaction=""method="post"> <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><!--导入jquery-->......