drf 解析器,响应器,路由控制
解析器
作用:
根据请求头 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 解析器,响应器,路由控制相关推荐
- drf 解析器的配置和使用
全局配置在settings文件中设定 drf 解析器 功能是解析从前端发来的各种请求,比如说是json格式,from-data格式,x-www-form-urlencode格式, 通过更改局部和全局的 ...
- DRF - 解析器组件
DRF之解析器组件 引入 Django RestFramework帮助我们实现了处理application/json协议请求的数据,另外,我们也提到,如果不使用DRF,直接从request.body里 ...
- DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)...
url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取 ...
- Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(二)
解析器介绍: 所谓解析器,就是前端传过来的数据,后端可以解析,从request.data中取出来,默认的解析器配置是三种编码格式都可以取 回到顶部 解析器的作用: 根据请求头(content-type ...
- Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(一)
阅读目录 一.url控制 基本路由写法:最常用 第二种写法:继承ModelViewSet 第三种写法:(自动生成路由,必须继承ModelViewSet) 二.解析器 前端不同的数据格式请求,后端解析得 ...
- rest-framework解析器,url控制,分页,响应器,渲染器,版本控制
解析器 1.json解析器 发一个json格式的post请求.后台打印: request_data---> {'title': '北京折叠'} request.POST---> <Q ...
- wireshark协议解析器原理与插件编写
工作原理 每个解析器解码自己的协议部分, 然后把封装协议的解码传递给后续协议. 因此它可能总是从一个Frame解析器开始, Frame解析器解析捕获文件自己的数据包细节(如:时间戳), 将数据交给一个 ...
- Vue Router 实现路由控制实战
本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习. Vue Router 实现路由控制实战 前言 一.什么是单页面应用及实现前端路 ...
- Rest Framework第二天-序列化组件(下)、解析器
序列化组件(下) 一.rest-framework序列化之ModelSerializer class BookSerializers(serializers.ModelSerializer):clas ...
最新文章
- 高级转录组分析和R数据可视化第11期(课程推迟,可先报名,时间另行告知)
- 如何理解PacBio的准确度?
- JAVA的异常(四):finally关键字
- Selenium常用的8大元素定位方法
- 安装 ibm-java-x86_64-sdk-6.0-9.3.x86_64.rpm 的三步骤
- php mysql.so 下载_Linux安装php-mysql提示需要:libmysqlclient.so.18()(64bit)的解决办法-Go语言中文社区...
- python实现目标检测_由浅入深:教你如何构建一个行人目标检测模型(Python)
- 简单说下我对H5的新增的标签和css3的新增属性
- java 基本语法与流程控制_java基础语法2-运算符与流程控制
- Mysql之1050错误解决办法
- 【基因组学】系统发育分析-进化树的相关知识点
- 淘宝自动发货源码,网店自动值守发货系统 不限制域名 支持客户自助提货及自动评价...
- oracle 生成拼音输入码,拼音码表的生成
- python33个保留字基本含义_Python保留字总结
- 互联网相亲,是怎么收割单身男女的?
- Java代理(静态代理、JDK动态代理、CGLIB动态代理)
- 知乎上的那些神回复,已笑趴~~~
- 五到十分钟java演讲_10分钟励志演讲稿5篇最新
- Spring Boot 2 精髓学习笔记(五)---Beetl 模板引擎(1)
- 浏览器-网页标题的图标
热门文章
- 部署项目,所谓“部署”到底是在干什么?
- IntelliJ IDEA for Mac 在eclipse(MacOS)模式下的快捷键
- cap理论具体含义_架构设计之「 CAP 定理 」
- 【人工智能初级系列(一)】科学计算库 Numpy
- c语言 char c1,c2; for (c1='0',C语言-5循环结构(PPT)复习课程.ppt
- excel单元格斜线_掌握这20个Excel技巧,小白轻松变大神
- n76e885_新唐N76E003,N76E616烧录,调试各种问题集【坑集】
- PCM设备在电网系统中的应用介绍
- 浙江交换机厂家带你全面了解什么是工业交换机?
- 工业交换机常见问题汇总!