rest framework 之渲染器
根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件。
用户请求头:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
一、JSON
1、urls.py
from django.urls import path, re_path, include
from api.views import TestView2
urlpatterns = [
re_path(r'(?P<version>[v1|v2]+)/test2', TestView2.as_view()),
]
2、views.py
from rest_framework.response import Response
from rest_framework.renderers import JSONRenderer
from rest_framework import serializers
class Test2Serializers(serializers.ModelSerializer):
class Meta:
model = models.Role
fields = '__all__'
class TestView2(APIView):
renderer_classes = [JSONRenderer]
def get(self, request, *args, **kwargs):
roles = models.Role.objects.all()
roles_ser = Test2Serializers(instance=roles, many=True)
return Response(roles_ser.data)
3、访问 URL:
http://127.0.0.1:8000/api/v1/test2/?format=json
http://127.0.0.1:8000/api/v1/test2/.json
http://127.0.0.1:8000/api/v1/test2

二、表格
1、views.py
from rest_framework.response import Response
from rest_framework.renderers import AdminRenderer
from rest_framework import serializers
class Test2Serializers(serializers.ModelSerializer):
class Meta:
model = models.Role
fields = '__all__'
class TestView2(APIView):
renderer_classes = [AdminRenderer]
def get(self, request, *args, **kwargs):
roles = models.Role.objects.all()
roles_ser = Test2Serializers(instance=roles, many=True)
return Response(roles_ser.data)
2、访问 URL:
http://127.0.0.1:8000/api/v1/test2/?format=admin
http://127.0.0.1:8000/api/v1/test2/.admin
http://127.0.0.1:8000/api/v1/test2

三、Form 表单
1、views.py
from rest_framework.response import Response
from rest_framework.renderers import HTMLFormRenderer
from rest_framework import serializers
class Test2Serializers(serializers.ModelSerializer):
class Meta:
model = models.Role
fields = '__all__'
class TestView2(APIView):
renderer_classes = [HTMLFormRenderer]
def get(self, request, *args, **kwargs):
roles = models.Role.objects.all().first() # 一个,不是全部
roles_ser = Test2Serializers(instance=roles, many=False)
return Response(roles_ser.data)
2、访问 URL:
http://127.0.0.1:8000/api/v1/test2/?format=html
http://127.0.0.1:8000/api/v1/test2/.html
http://127.0.0.1:8000/api/v1/test2

四、自定义显示模板
1、views.py
from rest_framework.response import Response
from rest_framework.renderers import TemplateHTMLRenderer
from rest_framework import serializers
class Test2Serializers(serializers.ModelSerializer):
class Meta:
model = models.Role
fields = '__all__'
class TestView2(APIView):
renderer_classes = [TemplateHTMLRenderer]
def get(self, request, *args, **kwargs):
roles = models.Role.objects.all().first() # 一个,不是全部
roles_ser = Test2Serializers(instance=roles, many=False)
return Response(roles_ser.data, template_name='roles_detail.html')
2、访问 URL:
http://127.0.0.1:8000/api/v1/test2/?format=html
http://127.0.0.1:8000/api/v1/test2/.html
http://127.0.0.1:8000/api/v1/test2
3、templates/roles_detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ 123 }}
</body>
</html>

五、浏览器格式 API+JSON
1、views.py
from rest_framework.response import Response
from rest_framework.renderers import BrowsableAPIRenderer, JSONRenderer
from rest_framework import serializers
class Test2Serializers(serializers.ModelSerializer):
class Meta:
model = models.Role
fields = '__all__'
class CustomBrowsableAPIRenderer(BrowsableAPIRenderer):
def get_default_renderer(self, view):
return JSONRenderer()
class TestView2(APIView):
renderer_classes = [CustomBrowsableAPIRenderer]
def get(self, request, *args, **kwargs):
roles = models.Role.objects.all()
roles_ser = Test2Serializers(instance=roles, many=True)
return Response(roles_ser.data)
2、访问 URL:
http://127.0.0.1:8000/api/v1/test2/?format=api
http://127.0.0.1:8000/api/v1/test2/.api
http://127.0.0.1:8000/api/v1/test2
Tips:如果同时多个存在时,自动根据URL后缀来选择渲染器。

六、全局配置
REST_FRAMEWORK = {
"DEFAULT_RENDERER_CLASSER": [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
]
}
rest framework 之渲染器的更多相关文章
- Django REST Framework - 分页 - 渲染器 - 解析器
为什么要使用分页? 我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输过程中耗时也会 ...
- rest framework之渲染器
一.内置渲染器 REST框架包括许多内置的Renderer类,它们允许你使用各种媒体类型返回响应.还支持定义你自己的自定义渲染器. 内置渲染器的使用 1.全局设置 可以使用DEFAULT_RENDER ...
- Django rest framework(8)---- 视图和渲染器
django rest framework 之视图 序列化器 PagerSerialiser from rest_framework import serializers from api im ...
- django的rest framework框架——分页、视图、路由、渲染器
一.rest framework的分页 1.使用rest framework内置类PageNumberPagination实现分类 from django.conf.urls import url f ...
- Django REST framework - 解析器和渲染器
目录 Django REST framework - 解析器和渲染器 解析器 Django中的数据解析 DRF中的解析器 渲染器 Django REST framework - 解析器和渲染器 解析器 ...
- 07 Django REST Framework 解析器与渲染器
01-解析器 REST 框架包括一些内置的Parser类,允许你接受各种媒体类型的请求.还支持定义自己的自定义解析器,这使你可以灵活地设计API接受的媒体类型. 注意: 开发客户端应用程序时应该始终记 ...
- Django REST framework基础:解析器和渲染器
解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...
- rest framework 解析器,渲染器
解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 请求体相关字段: Accept:指定了接收的数据类型 Conte ...
- Django REST framework 之分页,视图,路由,渲染器
1.分页 2.视图 3.路由 4.渲染器 1.分页 方法一: from django.shortcuts import render from rest_framework.versioning im ...
随机推荐
- webpack的一些坑
最近自己着手做一个小的Demo需要webpack,目前版本号是4.41.2,想使用的版本是3.6.0,因3x版本和4x版本很多地方不同,所以在安装过程中也是很多坎坷,下面是遇到的一些坑,和一些解决办法 ...
- 对post提交数据Content-Type的理解
Content-Type是指http/https发送信息至服务器时的内容编码类型,contentType用于表明发送数据流的类型,服务器根据编码类型使用特定的解析方式,获取数据流中的数据. 在网络请求 ...
- 亿级Web系统搭建 Web负载均衡的几种实现方式(阿里)
我还写了两篇详细的 参考:六大Web负载均衡原理与实现 参考:LVS(Linus Virtual Server):三种IP负载均衡方式比较+另三种Web负载均衡方式 其中LVS.HAProxy可以工作 ...
- Solr7.x学习(8)-使用spring-data-solr
1.maven配置 <dependency> <groupId>org.springframework.data</groupId> <artifactId& ...
- prometheus添加自定义监控与告警(etcd为例)
一.步骤及注意事项(前提,部署参考部署篇) 一般etcd集群会开启HTTPS认证,因此访问etcd需要对应的证书 使用证书创建etcd的secret 将etcd的secret挂在到prometheus ...
- 左倾红黑树——左倾2-3树(不是jdk1.8的TreeMap的红黑树)
public class RBTree<K extends Comparable<K>, V> { public static boolean RED = true; publ ...
- Spring Cloud OkHttp设计原理
Spring Cloud 框架最底层核心的组件就是服务调用方式,一般Spring Cloud框架采用的是HTTP的调用框架,本文将在 Spring Cloud应用场景下,介绍组件OkHttp3的设计原 ...
- npm install 报错 error Unexpected end of JSON input while parsing near '...sShrinkwrap":false,"d' 解决办法
npm install 报错 : error Unexpected end of JSON input while parsing near '...sShrinkwrap":false,& ...
- 类的练习3——python编程从入门到实践
9-13 使用OrderedDict: 在练习6-4中,使用一个标准字典来表示词汇表.使用OrderedDict类来重写这个程序,并确认输出的顺序与在字典中添加的键值对的顺序一致. from coll ...
- npm是干什么的(转)
原文:https://zhuanlan.zhihu.com/p/24357770 网上的 npm 教程主要都在讲怎么安装.配置和使用 npm,却不告诉新人「为什么要使用 npm」.今天我就来讲讲这个话 ...