根据 用户请求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',
]
}

参考文章:Django Rest Framework

rest framework 之渲染器的更多相关文章

  1. Django REST Framework - 分页 - 渲染器 - 解析器

    为什么要使用分页? 我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输过程中耗时也会 ...

  2. rest framework之渲染器

    一.内置渲染器 REST框架包括许多内置的Renderer类,它们允许你使用各种媒体类型返回响应.还支持定义你自己的自定义渲染器. 内置渲染器的使用 1.全局设置 可以使用DEFAULT_RENDER ...

  3. Django rest framework(8)---- 视图和渲染器

    django rest framework 之视图 序列化器    PagerSerialiser from rest_framework import serializers from api im ...

  4. django的rest framework框架——分页、视图、路由、渲染器

    一.rest framework的分页 1.使用rest framework内置类PageNumberPagination实现分类 from django.conf.urls import url f ...

  5. Django REST framework - 解析器和渲染器

    目录 Django REST framework - 解析器和渲染器 解析器 Django中的数据解析 DRF中的解析器 渲染器 Django REST framework - 解析器和渲染器 解析器 ...

  6. 07 Django REST Framework 解析器与渲染器

    01-解析器 REST 框架包括一些内置的Parser类,允许你接受各种媒体类型的请求.还支持定义自己的自定义解析器,这使你可以灵活地设计API接受的媒体类型. 注意: 开发客户端应用程序时应该始终记 ...

  7. Django REST framework基础:解析器和渲染器

    解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...

  8. rest framework 解析器,渲染器

    解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 请求体相关字段: Accept:指定了接收的数据类型 Conte ...

  9. Django REST framework 之分页,视图,路由,渲染器

    1.分页 2.视图 3.路由 4.渲染器 1.分页 方法一: from django.shortcuts import render from rest_framework.versioning im ...

随机推荐

  1. 根据IP查询所在城市接口(查询用户所在城市)

    转自:https://blog.csdn.net/liona_koukou/article/details/75646313 最近项目有用到定位用户客户端打开页面时所在的城市的需求,找到如下接口,做个 ...

  2. Spring Boot 知识笔记(Filter过滤器)

    Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 htm ...

  3. mysql 数据库中的每张表加同一个字段(避免重复加)

    DROP PROCEDURE IF EXISTS testEndHandle; DELIMITER $$ CREATE PROCEDURE testEndHandle() BEGIN DECLARE ...

  4. rpm续

    一.安装源码包 安装源码包通常须要一下三步: (1) ./configure. 这步可以定制功能,加上相应 的选项即可,具体有什么选项可以通过命令./configure help来查看.这一步会 自动 ...

  5. Isilon的WebUI上指定跨时区时间的小问题

    Isilon的WebUI的界面长这样: 假设我们在中国,也就是GMT+8的时区,我们想修改一个远在美国的Isilon cluster的时间. 你会发现,界面上用于指定时间的地方应该填写的不是下面选择的 ...

  6. jmeter 获取总的线程数

    String threads="${__BeanShell(ctx.getThreadGroup().getNumThreads())}"; vars.put("thre ...

  7. idea 添加默认注释

  8. 开发dubbo应用程序(一)入门demo详解

    1.简介: 引用自Dubbo官方文档简介: http://dubbo.apache.org/zh-cn/docs/user/dependencies.html 随着互联网的发展,网站应用的规模不断扩大 ...

  9. Centos7通过yum安装jdk8

    1.Centos7通过yum安装jdk8 2.Centos7通过yum安装jdk8

  10. Java数组转集合与集合转数组的坑

    在Java中将数组转为集合,会用到Arrays.asList()的方法,然而,这个方法却与我们的预期期望存在一些出入,当用到asList方法将数组转化成List列表时,对得到的List列表进行add( ...