根据 用户请求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. selenium--获取HTML源码断言和URL地址

    获取HTML源码 from selenium import webdriver import unittest class Test_source(unittest.TestCase): def Te ...

  2. 【luoguP1168】中位数

    题目链接 用一个大根堆和一个小根堆维护中位数即可 #include<iostream> #include<cstring> #include<cstdio> #in ...

  3. vue动态添加路由,跳转页面时,页面报错路由重复:vue-router.esm.js?8c4f:16 [vue-router] Duplicate named routes definition: { name: "Login", path: "/login" }

    之前用了一个vue-element-admin做了一个小项目,里面用到了动态添加路由,动态展示侧边栏, 当我切换页面时,控制台总是警告提示路由重复,连续跳转几次页面后,控制台就被这些警告占满了, 于是 ...

  4. Guava---缓存之LRU算法

    随笔 - 169  文章 - 0  评论 - 292 GuavaCache学习笔记一:自定义LRU算法的缓存实现   前言 今天在看GuavaCache缓存相关的源码,这里想到先自己手动实现一个LRU ...

  5. 微信第三方平台代公众号发起网页授权 48001 api unauthorized 问题

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&gr ...

  6. Redis NOAUTH Authentication required

    redis设置密码后停止服务报错,NOAUTH Authentication required 可以修改/etc/init.d/redis文件中的stop命令 $CLIEXEC -p $REDISPO ...

  7. 数据对象如何定义为Java代码示例

    想将数据保存为这样子: [{ "subject": { "code": "B123", "words": [{ &quo ...

  8. JMeter工具学习(一)工具使用详细介绍

    备注: JMeter版本4.0 JDK版本1.8 1,JMeter下载 2,下载后直接解压 3,打开解压文件,找到bin目录下的jmeter.bat,双击打开 4,打开jmeter 6,右键Test ...

  9. 原生Ajax的怎么用?

    <script> function createXMLHttpRequest() { var xmlhttp; try { //先直接创建XMLHttpRequest xmlhttp = ...

  10. Java8实战及自己的总结

    java8 介绍 java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本.   在jdk1.8中,java8以添加非常多的新特性, ...