• ContentType


    HTTP

    URL:统一资源定位器

    请求体数据封装格式ContentType

    能发post请求的两种方式:

    1. form表单: 能发urlencoded格式数据,不能发json数据格式
    2. ajax:所有数据格式都能发
    请求体: request.body 数据格式
    http协议post请求格式

    header:

    • url

    • HTTP/1.1

    • useragent:..................

    • accept:..............

    • ContentType: 可以是urlencoded格式,或其他格式:例如json格式

      空行

    body:

    • user=sunny&pwd=123 ---> urlencoded格式

    • b'{"name":"sunny", "age":1} ---> json格式

      1. 表单发送post请求
      # views.py
      def home(request):
          if request.method == 'GET':
              return render(request, 'home.html')
          else:
              print(request.POST)
              # request.POST django自动拆解urlencoded格式并解析成querydict格式
              # < QueryDict: {'csrfmiddlewaretoken': ['OHBOnVc4yACw6Ls5vuWjmClj1FN7VmA3SFlTuywk1xjIc14uOWX8FXulUNt9QT4t'],
              #                                       'user': ['1'], 'pwd': ['2']} >
              print(request.body)
              # b'csrfmiddlewaretoken=OHBOnVc4yACw6Ls5vuWjmClj1FN7VmA3SFlTuywk1xjIc14uOWX8FXulUNt9QT4t&user=1&pwd=2'
              # &user=1&pwd=2:  ContnetType:urlencoded 数据封装格式
              # form表单可设置格式
              # <form action="" method="post" enctype="application/x-www-form-urlencoded">
              # enctype="application/x-www-form-urlencoded  即 ContentType
              return HttpResponse('ok')
      
      
      # form 表单中的enctype属性即数据封装格式,可选,默认urlencoded
      <form action="" method="post" enctype="application/x-www-form-urlencoded">
          {% csrf_token %}
          <label>
              user:<input name='user' type="text">
          </label>
          <label>
              pwd:<input name='pwd' type="text">
          </label>
          <input type="submit">
      </form>
      
    • 浏览器

      ![

    1. ajax方式post请求: 请求体数据格式为json

      绝大部分场景使用json为contenttype格式

      $.ajax({
      	url:"home",
      	type:"post",
      	contentType:"json",  //conenttype格式为json, 小驼峰格式的contentType
      	data:JSON.stringify({   //将data序列化json字符串
      			num1:num1,
      			num2:num2,
      			csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val() //属性选择器选择name属性值
      }")
      })
      

      ajax post 发送的json格式的封装数据,django中request.POST中为空字典

      django只解析contentType为urlencoded格式的数据

      ajax post 发送的json格式的封装数据(字节串形式),只能从request.body中获取

      b'{"num1":1, "num2":"sunny"}' ,需解码utf8

      import json
      def home(request):
          res = json.loads(request.body.decode("utf8"))  # ajax请求的数据为json格式的字符串,直接反序列化就能得到字典格式的请求体数据
          return HttpResponse('ok')
      
    • post json数据csrfmiddlewaretoken不能通过认证
  • 相关阅读:
    第二阶段每日总结10
    第二阶段每日总结09
    第二阶段每日总结08
    第二周总结站立会议07
    第二周总结站立会议06
    第二周总结站立会议05
    第二阶段站立会议04
    Beta阶段项目总结
    Alpha阶段项目总结
    软件说明书
  • 原文地址:https://www.cnblogs.com/relaxlee/p/12842630.html
Copyright © 2020-2023  润新知