博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day060 ajax文件上传 json补充
阅读量:6942 次
发布时间:2019-06-27

本文共 3420 字,大约阅读时间需要 11 分钟。

 

请求头ContentType

文件上传时需要指定请求头,常见的类型有3种:

  1.application/x-www-form-urlencoded(可以类比成在url后面拼接的形式发送,即a=1&b=2)

  最常见的POST提交数据的方式.浏览器原生的form表单,如果不设置enctype,默认的提交格式为x-x-www-form-urlencoded. ajax默认也是他.

  2.multipart/form-data(上传文件的格式)

  这也是比较常见的POST的数据提交方式,我们使用表单上传文件时,必须让form表单的enctype等于multipart/form-data,form表单不支持发json类型的contenttype格式的数据,二ajax什么格式都可以发.

  3.application / json(以json字符串的形式发送)

$('.c1').click(function(){        $.ajax({            url:'{% url ' home'%}',            type: post,            headers:{               X-CSRFToken:$.cookie('csrftoken'),  #先记住,往后会讲               ContentType : ' json ',     },           data:JSON.stringify(              如果发送请求的格式是json格式,那么csrf_token必须写在hearders里面, 格式也是cookie,  #contentType也是headers里面的一部分,写在里面外面都可以)        name:name,}),           success:function(response){                 函数执行体}})

  基于form表单的文件上传 (from的作用一般是提示别人要提交数据)

  模板部分

contenttype都是键值的形式发送数据,这种form_data的格式一般是把大数据一段一段隔开用户名 :
头像 :
#上传文件 ,如果不用form_data格式发送,那么默认的是urlencoded格式,这个标签的数据会组成avatar: 文件名字来进行发送

  视图部分

def index(request):    print(request.body)   # 原始的请求体数据    print(request.GET)    # GET请求数据    print(request.POST)   # POST请求数据    print(request.FILES)  # 上传的文件数据        return render(request,'index.html')

  upload.py,内容如下: 

def upload(request):    if request.method=='GET':        return render(request,'upload.html')    else:        username=models.POST.get('user')        file_obj=models.FILES.get('file_obj') #获得文件数据对象        file_name=file_obj.name        with open(file_name,'wb') as f:            #方式1:            for data in file_obj:                f.write(data)            #方式2:            for chunks in file_obj.chunks(): #chunks()默认一次返回大小为2.5M,是一个生成器                f.write(chunks)

基于ajax的文件上传(from用不用都没有关系,这里就是一个盒子的作用)

基于form表单上传文件1.先导入jquery.js文件2.再导入jquery.cookie.js文件要不然会报错提示找不到jQuery文件,页面加载依上而下加载 html部分要在form表单中写入enctype = “multipart/form-data”(设置请求头)重点是views.py视图部分:import osdef upload(request):  if request.mthed == “GET”:    return render(request,”upload.html”)  else:    file_obj = request.FILES.get(“file”) (得到一个文件句柄)    file_name = file_obj.name       (得到上传的文件的名字)    path = os.path.join(“E:\上传的文件”,file_name)   (设置放置文件的路径)    with open(path,”wb”) as f:      for i in file_obj:        f.write(i)            (循环遍历写入上传的文件)        return HttpResponse(“ok”)基于Ajax上传文件:1. 我们只需要input输入框两个输入框其中一个设置为type = “file”,用来获取文件一个button按钮设置相关的name和id值2.    导入jQuery.cookie.js文件要在jQuery.js文件之后3.    设置提交按钮的单击事件$(“#btn”).click(function (){
var formdata = new FormData();(Ajax上传文件时,需要这个类型,它会将添加给他的键值对加工成formdata类型)var username = $(“$username”).val() (获取输入框的内容)var file = $(“#file”)[0].files[0]; ($(“#file”)[0].files得到的是一个文件列表,[0]取第一 项)formdata.append(“username”,username);formdata.append(“file”,file); (在formdata对象中添加数据)$.ajax({url:”{
% url ‘upload’ %}”,type:”post”,headers:{
"X-CSRFToken":$.cookie("csrftoken")},}) (设置请求头,通过post请求, csrf_token)processData:false, (不处理数据)contentType:false, (不设置内容类型)data:formdata, (将添加好数据的formdata放到data)success:function(request){}})这两个前端共用同一个views.py的方法即可但是要注意name对应的值要一样要不然取不到值,报错

模板

#用不用form没关系,这里就是个盒子的作用,一般写form标签是为了提示别人,这个地方的内容是要提交的      {% csrf_token %} 用户名
头像
 

关于json

JSON指的是JavaScript对象表示法

JSON是轻量级的文本数据交换格式

JSON独立于语言

JSON具有自我描述性,更易理解

 

转载于:https://www.cnblogs.com/zty1304368100/p/10484764.html

你可能感兴趣的文章
znujljhzolktftcc
查看>>
高流量站点NGINX与PHP-fpm配置优化
查看>>
eclipse中改变默认的workspace的方法及说明
查看>>
一个基于MVVM的TableView组件化实现方案
查看>>
教你区分LVDS屏线及屏接口定义
查看>>
C函数tolower,与toupper
查看>>
c 进程间的通信
查看>>
【张宴】PHP在金山游戏运营中的应用
查看>>
tomcat发布静态网页
查看>>
python函数参数前面单星号(*)和双星号(**)的区别
查看>>
深入理解javascript作用域系列第三篇——声明提升(hoisting)
查看>>
mybatis_helloWorld_sequence图(3)
查看>>
使用fastcgi_finish_request提高页面响应速度
查看>>
深入理解哈希表
查看>>
【python】编码
查看>>
LaTex Remove Left Margin 去除左边空间
查看>>
树莓派进阶之路 (006) - 树莓派安装wiringPi
查看>>
泛在传感器网络(Ubiquitous Sensor Network; USN)
查看>>
如何解决exe4j生成exe文件后弹出提示信息
查看>>
第六十节,文本元素标签
查看>>