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 ...
随机推荐
- selenium--拖拽页面元素
from selenium import webdriver import unittest from selenium.webdriver import ActionChains import ti ...
- OI蒟蒻收集的各种网址集合(无标记
本地收藏夹伤不起…… https://zh.wikipedia.org/wiki/Template:%E7%AE%97%E6%B3%95 https://courses.csail.mit.edu/6 ...
- vue-cli中的element-ui的主题更改
主题安装分为全局安装和局部安装(局部安装指的是项目内进行安装) 局部安装: 使用局部安装方便他人使用,他人直接安装主题需要的依赖就可以进行使用 局部安装的步骤 1.npm i element-them ...
- 鼠标滚轮滚动慢/拖动Office出现滞后问题处理
一.说明 我对外设一直不是很了解,买的鼠标今天到了,使用时遇到了两个问题在这里记一下. 二.滚轮滚动慢处理 问题描述:在网页中滚动滚轮每次只能上下移动一点点,感觉很难受. 问题原因:此问题是滚轮滚动一 ...
- CAS自旋volatile变量
public final int getAndIncrement() { for (;;) { int current = get(); // 取得AtomicInteger里存储的数值 int ne ...
- CentOS7安装Kubernetes1.16.3
一.概述 手工搭建 Kubernetes 集群是一件很繁琐的事情,为了简化这些操作,就产生了很多安装配置工具,如 Kubeadm ,Kubespray,RKE 等组件,我最终选择了官方的 Kubead ...
- 【题解】逆序排列 [51nod1020]
[题解]逆序排列 [51nod1020] 传送门:逆序排列 \([51nod1020]\) [题目描述] 共 \(T\) 组测试点,每一组给出 \(2\) 个整数 \(n\) 和 \(k\),在 \( ...
- sql 语句中定义的变量不能和 sql关键字冲突
sql 语句中定义的变量不能和 sql关键字冲突 from bs_email_account account LEFT JOIN bs_group_info gp ON account.group_i ...
- Python开发【第十四篇】装饰器
装饰器 什么是装饰器? 装饰器是一个函数,主要作用是用来给包装另一个函数或者类 包装的目的是不改变原函数名(或类名)的情况下改变或添加被包装对象的功能 函数装饰器 是指装饰器是一个函数,传入的是一 ...
- LinkedList、ArrayList、Vector三者的关系与区别?
LinkedList.ArrayList.Vector三者的关系与区别? 区分ArrayList,Vector,LinkedList的区别 ArrayList,Vector的区别: 1.出现版本:Ar ...