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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab max与min获取矩阵最大最小值函数

1.matlab中Max的用法1&#xff08;Min类似&#xff09; Matlab中max函数在矩阵中求函数大小的实例如下: C max(A) 1&#xff09;返回一个数组各不同维中的最大元素。 2&#xff09;如果A是一个向量&#xff0c;max(A)返回A中的最大元素。 3&#xff09;如果A是一个矩阵&…

shell中exec解析

参考&#xff1a;《linux命令、编辑器与shell编程》 《unix环境高级编程》exec和source都属于bash内部命令&#xff08;builtins commands&#xff09;&#xff0c;在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类&#xff1a;外部命…

今天敢用OSS放视频,明天阿里云就敢收你房子

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 请教各位大佬&#xff1a;如果网站里&#xff0c;视频多的话&#xff0c;有什么加速的办法&#xff0c;使用CDN可以嘛? 今天群友king王咨询了这个问题&#xff1a;他的客户网站在美国&#xff0c;用美国节点的服务…

matlab meshgrid

meshgrid用于从数组a和b产生网格。生成的网格矩阵A和B大小是相同的。它也可以是更高维的。 用法: [A,B]Meshgrid(a,b) 生成size(b)Xsize(a)大小的矩阵A和B。它相当于a从一行重复增加到size(b)行&#xff0c;把b转置成一列再重复增加到size(a)列。因此命令等效于&#xff1a; …

连续锁定2个不同的锁会死锁_研究死锁–第5部分:使用显式锁定

连续锁定2个不同的锁会死锁在我的上一个博客中&#xff0c;我研究了使用Java的传统synchronized关键字和锁排序来修复破碎的&#xff0c;死锁的余额转移示例代码。 但是&#xff0c;有另一种方法称为显式锁定。 在这里&#xff0c;将锁定机制称为显式而非隐式的想法是&#xf…

fork source exec区别差异

fork 使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process, 但 parent process 的环境是不会因 child process 的改变而改变的. source 使用 source 方式运行 scrip…

LOJ2980 THUSC2017大魔法师(线段树+矩阵乘法)

线段树每个节点维护(A,B,C,len)向量&#xff0c;操作即是将其乘上一个矩阵。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long lo…

在ECR上推送Spring Boot Docker映像

在先前的博客中&#xff0c;我们将Spring Boot应用程序与EC2集成在一起。 它是您可以在Amazon Web Services上进行的最原始的部署形式之一。 在本教程中&#xff0c;我们将使用我们的应用程序创建一个docker映像&#xff0c;该映像将存储到Amazon EC2容器注册表中 。 您需要安…

Linux信号处理机制

在Linux中&#xff0c;信号是进程间通讯的一种方式&#xff0c;它采用的是异步机制。当信号发送到某个进程中时&#xff0c;操作系统会中断该进程的正常流程&#xff0c;并进入相应的信号处理函数执行操作&#xff0c;完成后再回到中断的地方继续执行。 需要说明的是&#xff0…

pyspider爬虫框架

特点&#xff1a; 去重处理&#xff0c;结果监控&#xff0c;多进程处理&#xff0c;pyquery提取&#xff0c;错误重试&#xff0c;webUI管理&#xff0c;代码简洁&#xff0c;JS渲染 安装&#xff1a; anaconda里边没搜到pyspider&#xff0c;所以手动安装 查看pyspider的命令…

matlab subplot同时显示多幅图像

subplot是MATLAB中的函数。 使用方法&#xff1a;subplot&#xff08;m,n,p&#xff09;或者subplot&#xff08;m n p&#xff09;。 subplot是将多个图画到一个平面上的工具。其中&#xff0c;m表示是图排成m行&#xff0c;n表示图排成n列&#xff0c;也就是整个figure中有n个…

matlab var求方差

对二维数组a b1 var(a); % 按默认来求 b2 var(a, 0); % 默认的公式&#xff08;用N-1&#xff09; c1 var(a, 1); % 另外的公式&#xff08;用N&#xff09; d1 var(a, 0, 1); % 对每列操作&#xff08;用N-1&#xff09; d2 var(a, 0, 2); % 对每行操作&#xff08;…

1. git基础

1. 安装git sudo apt-get install git 2. 注册 git config --global user.name "Your Name" git config --global user.email "emailexample.com" 3. 创建版本库 mkdir learngit cd learngitgit init ##将这个目录初始化成…

国外persona用户画像_使用Mozilla Persona验证用户的指南

国外persona用户画像到目前为止&#xff0c;只有Twitter和Facebook身份验证&#xff0c;我决定将Mozilla Persona添加到我最新项目&#xff08; 计算机 &#xff0c;计算机生成的音乐&#xff09;的列表中。 为什么&#xff1f; 我喜欢尝试新事物 存储密码是一个艰巨的过程&a…

每天一个linux命令(41):ps命令

Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照&#xff0c;就是执行ps命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用top命令。 要对进程进行监测和控制&#x…

module.js:549 throw err;

解决方法&#xff1a; 1、有可能是拼写错误 2、未明原因。 &#xff08;1&#xff09;删除 node_modules 文件夹 &#xff08;2&#xff09;cnpm cache clean&#xff0c;不过提示错误就用 cnpm cache clean --force &#xff08;3&#xff09;cnpm install 如果还是显示错误就…

matlab zeros初始化为0矩阵

zeros为创建一个值为零的数组&#xff1b; 如matrix1zeros(4,5);%4*5的矩阵&#xff0c;矩阵中每个元素都为0 matrix2zeros(4,5,3);%4*5*3的数组&#xff0c;数组中每个元素都为0 下面举一个将图像存到数组的例子 对RGB图片1.jpg&#xff0c;2.jpg&#xff1b;大小为700*500…

在一个Java版本上运行Eclipse IDE,但在另一个Java版本上运行

Java™开发人员 &#xff08;和其他Java开发人员变体&#xff09;的Eclipse IDE本身就是用于构建Java应用程序的Java应用程序。 这种关系可能会让您的大脑有些奇怪。 Eclipse IDE几乎完全用Java编写&#xff0c;需要Java运行时环境&#xff08;JRE&#xff09;才能运行。 JRE仅…

1.6.4 分离原则: 策略同机制分离,接口同引擎分离

在Unix之失的讨论中&#xff0c;我们谈到过X系统的设计者在设计中的基本抉择是实行“机制&#xff0c;而不是策略”这种做法——使X成为一个通用图形引擎&#xff0c;而将用户界面风格留给工具包或者系统的其它层次来决定。这一点得以证明是正确的&#xff0c;因为策略和机制是…