Ajax

特点

  异步提交,局部刷新

朝后端发送请求的方式

  1.浏览器地址栏直接输入url回车-------GET
  2.a标签href-----------------------GET
  3.form表单------------------------GET/POST

  4.ajax----------------------------GET/POST
  ajax不是新的编程语言,而是一种使用现有标准的新方法
  不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容

基本语法

  $('#d1').click(function(){
        $.ajax({
              // 1.指定往哪个后端发送请求
              url:'',
              // 2.请求方式
              type:'post',
              // 3.数据
              data:{},
              // 4.回调函数:当后端给你返回结果的时候会自动出发,args用来接收后端返回结果
              dataType:true,
              success:function(args){
                    alert(args)
              }
        })
  })

字典的返回,需要序列化 dumps,前端:JSON.parse

  from django.http import JsonResponse
  return JsonResponse(d) # 传到前端的直接转成对象了
  """
  回调函数是不会自动帮你序列化的
  可以使用JsonResponse返回数据,因为可以自动序列化
  """

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

from表单

  默认的编码格式是urlencoded
  username=jason&password=123
  django针对符合urlencoded编码格式的数据都会自动帮你解析封装到request.POST中

  如果把编码格式改成formdata,那么针对普通的键值对还是解析到request.POST中,而将文件解析到request.FILES中
  from表单时没法发送json格式数据的

ajax

  $('#d1').click(function(){
      $ajax({
          url:'',
          type:'post',
          data:{'username':'','password':''}
          success:function(){
        
                }
            })
        })
  默认的编码格式也是urlencoded
  username=jason&password=123
  django针对符合urlencoded编码格式的数据都会自动帮你解析封装到request.POST中

ajax发送json格式数据

  $('#d1').click(function(){
      $ajax({
          url:'',
          type:'post',
          contentType:'application/json', # 指定编码格式为json
          data:JSON.stringify({'username':'','password':''}),
          success:function(args){
        
          }
      })
  })
  ## 这个时候后端如何处理呢?
  request.is_ajax() # 判断当前请求是否是Ajax请求,返回布尔值
  request.body # b'{'username':'','password':''}'
  json_bytes = request.boby
  json_str = json_bytes.decode('utf8')
  json_dict = json.loads(json_str)
  其实json.loads() 可以自动解码再反序列化
  json_dict = json.loads(json_bytes)

ajax发送文件

  ajax发送文件需要借助于js内置对象FormData
  $('#d1').click(fuction(){
  let formDataObj = new FormData() # 生成一个formData对象
  // 可以添加普通键值对
  formDataObj.append('username',$('#d1').val())
  formDataObj.append('password',$('#d2').val())
  // 也可以添加文件对象
  formDataObj.append('myfile',$('#d3')[0].files[0]) # 获取文件对象
  $.ajax({
        url:'',
        type:'post',
        data:formDataObj, # 直接将对象放在data这
        // 发送文件必须指定的参数
        contentType:false, # 不需要用任何编码,django后端能都自动识别formdata对象
        processData:false, # 告诉浏览器,不要对数据进行任何处理
    
        success:function(args){
        
                }
            })
        })
  # 那么后端如何处理呢?
  request.POST
  request.FILES
  """
  1.需要利用内置对象FormData
  2.需要指定两个参数:contengType,processData,设置为false
  3.django后端能够识别到formdata对象,并且能够将内部普通见键值对封装到POST,文件封装到FILES
  """

django自带序列化组件(drf)

  # 前后端分离的项目,后端只需要写代码将数据处理好,能够序列化返回给前端即可
  [{},{},{}]
  from django.core import serializers
  res = serializers.serialize('json',user_queryset) # 可以直接将数据编程json格式的数据 

批量插入数据

  book_list = []
  for i in range(100000):
      book_obj = models.Book(title='第%s本书'%i)
      book_list.append(book_obj)
  models.Book.objects.bulk_create(book_list)

  """
  当你想要批量插入数据的时候,使用ORM提供的
  bulk_create(),很快
  """
posted @ 2021-01-10 13:50  浮生一夜不知秋  阅读(67)  评论(0编辑  收藏  举报