10、Django的文件上传

1、上传文件相关javascript

  1. 请求头ContentType

ContentType指的是请求体的编码类型,常见的类型共有3种:html

  1. application/x-www-form-urlencoded
    最多见的 POST 提交数据的方式了
    浏览器的原生 form 表单,若是不设置 enctype 属性,那么最终就会以 默认格式application/x-www-form-urlencoded 方式提交数据,ajax默认也是这个
    urlencoded是一种数据格式,
    好比:
    username=yang&password=123&csrfmiddlewaretoken=.......
    # 这样的一种格式,相似get请求提交数据的格式前端

    # 这样在后台,就能够经过request.POST,就能够直接拿到数据了
        <QueryDict:{'username':['yang']},'password':['123'],......>
  2. multipart/form-data
    专门用来传输文件的消息格式,会把文件做为片断数据发送,而不是整个文件一块儿发送
  3. application/json
    告诉服务端消息主体是序列化后的 JSON 字符串
    以前给ajax传递数据,就是把字典写成了一个相似json类型的数据
    def login(request):
    ...
    ret = '{"code":0,"redirect_url":"/index/"}'
    return HttpResponse(ret)java

    在不加content_type='application/json'时,传递过去的就是一个字符串
    def login(request):
    d1 = {"code":0,"redirect_url":"/index/"}
    import json
    d1_json = json.dumps(d1)
    return HttpResponse(d1_json,)python

    success:function (res) {
     console.log(res,typeof res);
        # {"code": 0, "redirect_url": "/index/"} string
        ....
     }
    
    这个时候,就不方便咱们后续的使用,咱们指望仍是能拿到一个字典(自定义对象的类型)

    使用content_type='application/json',ajax就会调用本身内部的反序列化机制,直接调用反序列化方法
    def login(request):
    d1 = {"code":0,"redirect_url":"/index/"}
    import json
    d1_json = json.dumps(d1)
    return HttpResponse(d1_json,content_type='application/json')jquery

    success:function (res) {
     console.log(res,typeof res);
        # {code: 0, redirect_url: "/index/"} "object"
        ....
     }
    
    此时,ajax端不须要本身序列化,也拿到了object类型的对象,这是由于内部自动调用的
  4. application/json 在ajax端发送数据,咱们如何在视图函数中应用
    ajax

相关文章
相关标签/搜索