满足两个要求,request.Post中才有值
1.请求头要求:
请求头中的Content-Type为application/x-www-form-urlencoded
2.数据格式要求
name=x&age=xx&gender=x
如:
a.form表单提交

<form methed..>
  input
</form>

b.ajax提交

$.ajax({
url:..
type:POST
headers:{Content-Type:application/json}
data:{name:xx,age=xx} #内部转化为 name=xx&age=xx&gender=xx
})

没有值情况一:请求头不是规定格式,body有值,POST没值

$.ajax({
url:..
type:POST
headers:{Content-Type:application/json}
data:{name:xx,age=xx} #内部转化为 name=xx&age=xx&gender=xx
})

没有值情况二:请求头和数据格式都不对

$.ajax({
url:..
type:POST
headers:{Content-Type:application/json}
data:JSON.stringfy({name:xx,age=xx}) #{name:xx,age:xx}
})

--rest_framework解析器 对请求数据进行解析

from rest_framework.parsers import JSONParser,FormParser

class ParserView(APIView):
parser_classes = [JSONParser,FormParser]
#JSONParser表示只能解析content-type:application/json头
#FormParser表示解析content-type:application/x-www-form-urlencoded头
def post(self,request,*args,**kwargs):
'''parser_classes = [JSONParser]
允许用户发送JSON格式数据
a.content-type:application/json
b.{'name':xx,age:xx}
'''
#获取解析后的结果
print(request.data)
return HttpResponse('用户列表')

全局配置
#解析器配置

'DEFAULT_PARSER_CLASSES':['rest_framework.parsers.JSONParser','rest_framework.parsers.FormParser']
解析后的数据需要在request.data中去取值
即request._request.POST.get('xxx')替换为request.data.get('xxx')
class JSONParser(BaseParser):
class FormParser(BaseParser):
class MultiPartParser(BaseParser):
class FileUploadParser(BaseParser):
下面两个是上传文件

「Django」rest_framework学习系列-解析器的更多相关文章

  1. 「Django」rest_framework学习系列-渲染器

    渲染器:作用于页面,JSONRenderer只是JSON格式,BrowsableAPIRenderer有页面,.AdminRenderer页面以admin形式呈现(需要在请求地址后缀添加?fromat ...

  2. 「Django」rest_framework学习系列-API访问跨域问题

    #以中间件方式解决API数据访问跨域问题1.API下新建文件夹下写PY文件a.引入内置类继承: from django.middleware.common import MiddlewareMixin ...

  3. 「Django」rest_framework学习系列-路由

    自动生成4个url路由:from rest_framework import routersrouter = routers.DefaultRouter()router.register(r'wrx' ...

  4. 「Django」rest_framework学习系列-分页

    分页a.分页,看第N页,每页显示N条数据方式一:使用PageNumberPagination创建分页对象,配合settings全局配置 views设置 from rest_framework.pagi ...

  5. 「Django」rest_framework学习系列-视图

    方式一 1.settings设置 INSTALLED_APPS = [ ... 'rest_framework', ] 2.views设置 from rest_framework.response i ...

  6. 「Django」rest_framework学习系列-序列化

    序列化方式一 :在业务类里序列化数据库数据 class RolesView(APIView): def get(self,request,*args,**kwargs): roles = models ...

  7. 「Django」rest_framework学习系列-版本认证

    1.自己写: class UserView(APIView): versioning_class = ParamVersion def get(self,request,*args,**kwargs) ...

  8. 「Django」rest_framework学习系列-权限认证

    权限认证:1.项目下utils文件写permissions.py文件 from rest_framework.permissions import BasePermission class SVIPP ...

  9. 「Django」rest_framework学习系列-节流控制

    1.节流自定义类: import time from api import models VISIT_RECORD = {} class VisitThrottle(BaseThrottle): #设 ...

随机推荐

  1. Python3实现机器学习经典算法(三)ID3决策树

    一.ID3决策树概述 ID3决策树是另一种非常重要的用来处理分类问题的结构,它形似一个嵌套N层的IF…ELSE结构,但是它的判断标准不再是一个关系表达式,而是对应的模块的信息增益.它通过信息增益的大小 ...

  2. c# 消息机制篡改

    1.背景介绍: c#程序想要针对某个的消息进行别的行为.例如:窗体不可拖动. 2.应用函数WinProc 以窗口不可拖动举例: const int WM_NCLBUTTONDOWN = 0x00A1; ...

  3. Android源码项目目录结构

    src: 存放java代码 gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的id project.properties: 指定当前工程采用的开发工具包的版本 libs: 当前 ...

  4. EasyUI使用DataGrid向服务器传参

    由于DataGrid自带有Post方式,使用Url可以向指定的地址Post数据,所以从这方面来看和Jquery的Ajax非常像(我想应该就是使用的Ajax,不过没有深入研究过Easyui的源代码).但 ...

  5. Android中res/layout文件夹里新建布局文件,R中不生成ID的奇葩错误

    新浪微博:http://weibo.com/u/1928100503 网上看了下,发现大都是xml文件名大写而导致的id不能生成的问题,但在下的问题却不是大小写的问题,在下发现,当你的layout目录 ...

  6. 详解Python闭包,装饰器及类装饰器

    在项目开发中,总会遇到在原代码的基础上添加额外的功能模块,原有的代码也许是很久以前所写,为了添加新功能的代码块,您一般还得重新熟悉源代码,稍微搞清楚一点它的逻辑,这无疑是一件特别头疼的事情.今天我们介 ...

  7. mysql中用户和权限

    用户管理 用户数据所在位置: mysql中的所有用户,都存储在系统数据库(mysql)中的user 表中——不管哪个数据库的用户,都存储在这里. 表初始内容如下: 创建用户: 形式: create   ...

  8. Delphi编程防止界面卡死的方法经验分享

    Delphi编程防止界面卡死的方法经验分享! 1.循环里面防止界面卡死的方法可以使用Application.ProcessMessages:  例如下列方法:    var      n: Integ ...

  9. 第197天:js---caller、callee、constructor和prototype用法

    一.caller---返回函数调用者 //返回函数调用者 //caller的应用场景 主要用于察看函数本身被哪个函数调用 function fn() { //判断某函数是否被调用 if (fn.cal ...

  10. 第89天:HTML5中 访问历史、全屏和网页存储API

    一.访问历史 API 通过history对象实现前进.后退和刷新之类的操作 history新增的两个方法history.replaceState()和history.pushState()方法属于HT ...