解析器

作用:
根据请求头 content-type 选择对应的解析器对请求体内容进行处理。
有application/json,x-www-form-urlencoded,form-data等格式使用:局部使用:from rest_framework.parsers import JSONParser,FormParseparser_classes = [JSONParser, ]全局使用:REST_FRAMEWORK = {'DEFAULT_PARSER_CLASSES':['rest_framework.parsers.JSONParser''rest_framework.parsers.FormParser''rest_framework.parsers.MultiPartParser']
}局部使用指定的解析器:parser_classes = [JSONParser, ]

路由控制

三种
1.基本路由:url(r'^admin/', admin.site.urls)
2.半自动路由: url(r'^users/$', views.Users.as_view({'get':'list','post':'create'})),必须继承:ViewSetMixin,继承顺序3.from django.conf.urls import url,include
from app01 import views
from rest_framework import routers
router=routers.DefaultRouter()
# 两个参数,一个是匹配的路由,一个是视图中写的CBV的类
router.register('publish',views.PublishView)
urlpatterns = [# http://127.0.0.1:8000/publish/format=json(渲染器通过这个判断,返回渲染的页面)# url(r'^publish/', views.PublishView.as_view({'get':'list','post':'create'})),# http://127.0.0.1:8000/publish.json(渲染器通过这个判断,返回渲染的页面)# url(r'^publish\.(?P<format>\w+)$', views.PublishView.as_view({'get':'list','post':'create'})),# 可以用 以下方式访问# 1 http://127.0.0.1:8000/publish/# 2 http://127.0.0.1:8000/publish.json# 3 http://127.0.0.1:8000/publish/3# 4 http://127.0.0.1:8000/publish/3.json   url(r'',include(router.urls))
]

响应器

一般不需要配置,使用默认的作用:
根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件。
用户请求URL:http://127.0.0.1:8000/test/?format=jsonhttp://127.0.0.1:8000/test.json内置的响应器
显示json格式:JSONRenderer
http://127.0.0.1:8000/test/?format=json
http://127.0.0.1:8000/test.json
http://127.0.0.1:8000/test/默认显示格式:BrowsableAPIRenderer(可以修改它的html文件)
http://127.0.0.1:8000/test/?format=api
http://127.0.0.1:8000/test.api
http://127.0.0.1:8000/test/表格方式:AdminRenderer
http://127.0.0.1:8000/test/?format=admin
http://127.0.0.1:8000/test.admin
http://127.0.0.1:8000/test/form表单方式:HTMLFormRenderer
http://127.0.0.1:8000/test/?format=form
http://127.0.0.1:8000/test.form
http://127.0.0.1:8000/test/局部使用:
from rest_framework.renderers import  HTMLFormRenderer,BrowsableAPIRenderer
class BookDetailView(APIView):renderer_classes = [HTMLFormRenderer,BrowsableAPIRenderer ]全局使用:REST_FRAMEWORK = {'DEFAULT_RENDERER_CLASSES':['rest_framework.renderers.JSONRenderer']
}

响应器的配置文件查找顺序

1.先从我们定义的视图类中找
class APIView(View):#我们定义的视图类继承了APIView,如果在视图类中定义了renderer(响应器,渲染器)_classes,则优先使用我们定义的renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES2.再从配置文件中找
api_settings.DEFAULT_RENDERER_CLASSES
#api_settings如果没有DEFAULT_RENDERER_CLASSES属性,会触发__getattr__方法def __getattr__(self, attr):...try:#先从user_settings中查找val = self.user_settings[attr]except KeyError:#如果没有找到,从默认配置中找val = self.defaults[attr]if attr in self.import_strings:val = perform_import(val, attr)self._cached_attrs.add(attr)setattr(self, attr, val)return val@propertydef user_settings(self):if not hasattr(self, '_user_settings'):#从配置文件的'REST_FRAMEWORK'中查找self._user_settings = getattr(settings, 'REST_FRAMEWORK', {})return self._user_settings3.从默认配置中找def __init__(self, user_settings=None, defaults=None, import_strings=None):if user_settings:...#可以实例化的时候传入self.defaults = defaults or DEFAULTS
#默认的配置文件
DEFAULTS = {# Base API policies'DEFAULT_RENDERER_CLASSES': ('rest_framework.renderers.JSONRenderer','rest_framework.renderers.BrowsableAPIRenderer',)

转载于:https://www.cnblogs.com/robert-zhou/p/10632795.html

drf 解析器,响应器,路由控制相关推荐

  1. drf 解析器的配置和使用

    全局配置在settings文件中设定 drf 解析器 功能是解析从前端发来的各种请求,比如说是json格式,from-data格式,x-www-form-urlencode格式, 通过更改局部和全局的 ...

  2. DRF - 解析器组件

    DRF之解析器组件 引入 Django RestFramework帮助我们实现了处理application/json协议请求的数据,另外,我们也提到,如果不使用DRF,直接从request.body里 ...

  3. DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)...

    url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取 ...

  4. Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(二)

    解析器介绍: 所谓解析器,就是前端传过来的数据,后端可以解析,从request.data中取出来,默认的解析器配置是三种编码格式都可以取 回到顶部 解析器的作用: 根据请求头(content-type ...

  5. Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(一)

    阅读目录 一.url控制 基本路由写法:最常用 第二种写法:继承ModelViewSet 第三种写法:(自动生成路由,必须继承ModelViewSet) 二.解析器 前端不同的数据格式请求,后端解析得 ...

  6. rest-framework解析器,url控制,分页,响应器,渲染器,版本控制

    解析器 1.json解析器 发一个json格式的post请求.后台打印: request_data---> {'title': '北京折叠'} request.POST---> <Q ...

  7. wireshark协议解析器原理与插件编写

    工作原理 每个解析器解码自己的协议部分, 然后把封装协议的解码传递给后续协议. 因此它可能总是从一个Frame解析器开始, Frame解析器解析捕获文件自己的数据包细节(如:时间戳), 将数据交给一个 ...

  8. Vue Router 实现路由控制实战

    本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习. Vue Router 实现路由控制实战 前言 一.什么是单页面应用及实现前端路 ...

  9. Rest Framework第二天-序列化组件(下)、解析器

    序列化组件(下) 一.rest-framework序列化之ModelSerializer class BookSerializers(serializers.ModelSerializer):clas ...

最新文章

  1. 高级转录组分析和R数据可视化第11期(课程推迟,可先报名,时间另行告知)
  2. 如何理解PacBio的准确度?
  3. JAVA的异常(四):finally关键字
  4. Selenium常用的8大元素定位方法
  5. 安装 ibm-java-x86_64-sdk-6.0-9.3.x86_64.rpm 的三步骤
  6. php mysql.so 下载_Linux安装php-mysql提示需要:libmysqlclient.so.18()(64bit)的解决办法-Go语言中文社区...
  7. python实现目标检测_由浅入深:教你如何构建一个行人目标检测模型(Python)
  8. 简单说下我对H5的新增的标签和css3的新增属性
  9. java 基本语法与流程控制_java基础语法2-运算符与流程控制
  10. Mysql之1050错误解决办法
  11. 【基因组学】系统发育分析-进化树的相关知识点
  12. 淘宝自动发货源码,网店自动值守发货系统 不限制域名 支持客户自助提货及自动评价...
  13. oracle 生成拼音输入码,拼音码表的生成
  14. python33个保留字基本含义_Python保留字总结
  15. 互联网相亲,是怎么收割单身男女的?
  16. Java代理(静态代理、JDK动态代理、CGLIB动态代理)
  17. 知乎上的那些神回复,已笑趴~~~
  18. 五到十分钟java演讲_10分钟励志演讲稿5篇最新
  19. Spring Boot 2 精髓学习笔记(五)---Beetl 模板引擎(1)
  20. 浏览器-网页标题的图标

热门文章

  1. 部署项目,所谓“部署”到底是在干什么?
  2. IntelliJ IDEA for Mac 在eclipse(MacOS)模式下的快捷键
  3. cap理论具体含义_架构设计之「 CAP 定理 」
  4. 【人工智能初级系列(一)】科学计算库 Numpy
  5. c语言 char c1,c2; for (c1='0',C语言-5循环结构(PPT)复习课程.ppt
  6. excel单元格斜线_掌握这20个Excel技巧,小白轻松变大神
  7. n76e885_新唐N76E003,N76E616烧录,调试各种问题集【坑集】
  8. PCM设备在电网系统中的应用介绍
  9. 浙江交换机厂家带你全面了解什么是工业交换机?
  10. 工业交换机常见问题汇总!