learn-record

content_type --> 做数据接口,解析器的时候 会用到

content_type

1. 是前后端,跟其他项目交互的一种消息格式
2. 响应头里的格式 content_type:text/html;charset=utf-8(默认的)
3. 请求头里的格式 Content-Type: application/x-www-form-urlencoded; charset=UTF-8

django 认识 form-data数据 和 urlencoded 数据格式

django内置一种解析器原理 (urlencoded格式数据)

django解析器 会拿到请求头里的content_type 做判断
if content_type = \'application/x-www-form-urlencoded; charset=UTF-8\'
      会从view sourse拿数据,数据如下
      name=root&pwd=zdd.961225&csrfmiddlewaretoken=YNhJKBb1z3heoUrxmOybCLqswYtJYWXtkNLVTch6b074apxifs8JFV8plKTMqiF6
      &符号分割处理,把数据以键值对存到request.POST里
      <QueryDict: {\'name\': [\'root\'], \'csrfmiddlewaretoken\': [\'YNhJKBb1z3heoUrxmOybCLqswYtJYWXtkNLVTch6b074apxifs8JFV8plKTMqiF6\'], \'pwd\': [\'123\']}>
       

content_type 上传文件

前端代码: 
<form action="{% url \'upload\' %}" method="post" enctype="multipart/form-data">
  {% csrf_token %}
  <input type="file" name="head_portrait">
  <input type="submit">
</form>
后端代码:
def upload(request):

  if request.method == \'GET\':
      return render(request,\'upload.html\')
  else:
      #request.POST拿到的是文件请求数据,request.FILES拿到的是文件数据
      # print(request.FILES)
      file_obj = request.FILES.get(\'head_portrait\')
      print(file_obj)
      file_name = file_obj.name
      print(file_name)
      import os
      file_path = os.path.join(settings.BASE_DIR,\'statics\',\'img\',file_name)
      with open(file_path,\'wb\')as f:
          for line in file_obj:
              f.write(line)
      return HttpResponse(\'OK\')

ajax上传文件

<script>
  $(\'#btn\').click(function () {
      var formdData = new FormData();
      var file = $(\'#file\')[0].files[0];
      formdData.append(\'head_portrait\',file);
      formdData.append(\'csrfmiddlewaretoken\',\'{{ csrf_token }}\');
      $.ajax({
           
          url:{% url \'upload\' %},
          type:\'post\',
          data:formdData,
          processData:false,
          contentType:false,
          success:function (res) {
              console.log(res)
          }
           
      })
  })
</script>
后端跟上边一样

 

读文件的另一种方法

for i in file_obj.chunks(chunk_size=none):#chunks() 默认一次返回的大小为65536B,也就是64kb,最大2.5M,就是一个生成器,chunk_size 指定文件大小
     f.write(i)

分类:

技术点:

相关文章: