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 ...
随机推荐
- day 19
If you think you can, you can. And if you think you can't, you're right.
- Vue响应式原理以及注意事项
响应基于 set 和 get(Object.defineProperty) 类型: 单向绑定 双向绑定 简单例子(基于Object.defineProperty) <!DOCTYPE html& ...
- fping 命令说明
参数: -a 表示只在输出报告⾥列出当前存活的IP -d 解析主机名 -f 参数表示读⼊这个文件 -s 显示汇总信息 -g 指定⽹网段
- 使用kubernetes管理包的常用命令
常用命令是: ## 获取指定命名空间(rubikt)下所有的部署的服务 kubectl.exe get deployments --namespace rubikt ## 获取制定命名空间(rubik ...
- how to write your first linux device driver
how to write your first linux device driver 0. environment-ubuntu 1804 64bit 1. apt-get install linu ...
- sql server数据表大小初始化
sql server表在存储大数据和处理大数据表时,经常会遇到表空间越来越大,有时候会超出应该占有空间大小很多,此时如果表数据是压缩存储的,那么重新执行一下压缩脚本,数据的大小会重新初始化,然后再使用 ...
- Spring JDBC最佳实践(3)
原文地址:https://my.oschina.net/u/218421/blog/38598 spring jdbc包提供了JdbcTemplate和它的两个兄弟SimpleJdbcTemplate ...
- spring boot 源码解析52-actuate中MVCEndPoint解析
今天有个别项目的jolokia的endpoint不能访问,调试源码发现:endpoint.enabled的开关导致的. 关于Endpoint, <Springboot Endpoint之二:En ...
- C/C++ 指针常量和常量指针
为了区分是指向常量的指针还是const指针(表示指针本身是常量) 一个简便方法:从由往左读,遇到p就替换为“p is a”,遇到*就替换为“point to”,其余不变. const int * p ...
- C语言输入带空格的字符串
参考:https://blog.csdn.net/vincemar/article/details/78750435 因为: scanf("%s",str); 遇到空格就停止接收后 ...