02_Tutorial 2: Requests and Responses 请求和响应
1、请求和响应
1、文档
https://www.django-rest-framework.org/tutorial/2-requests-and-responses/
https://q1mi.github.io/Django-REST-framework-documentation/tutorial/2-requests-and-responses_zh/
2、请求对象:request.data
# request.data # 处理任意数据 适用于'POST','PUT'和'PATCH'方法
# request.data可以处理传入的json请求,但它也可以处理其他格式。
3、返回对象:Response
# return Response(data) 渲染成客户端请求的内容类型。
4、status code
from rest_framework import status # status模块中的每个状态代码
return Response(status=status.HTTP_404_NOT_FOUND)
5、API views
# 基于函数视图, 编写API视图的包装器 等价于 基于类视图的APIView类
@api_view(['GET', 'POST'])
@api_view(['GET', 'PUT', 'DELETE'])
REST框架提供了两个可用于编写API视图的包装器(wrappers)。
- 用于基于函数视图的
@api_view
装饰器。 - 用于基于类视图的
APIView
类。
6、可选格式后缀
视图中
def snippet_detail(request, pk, format=None)
def snippet_list(request, format=None)
urls
from rest_framework.urlpatterns import format_suffix_patterns # 可选的格式后缀
urlpatterns = format_suffix_patterns(urlpatterns)
7、代码
# ## Tutorial 2: Requests and Responses from rest_framework import status # status模块中的每个状态代码
from rest_framework.decorators import api_view
from rest_framework.response import Response
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer @api_view(['GET', 'POST']) # 基于函数视图, 编写API视图的包装器 等价于 基于类视图的APIView类
def snippet_list(request, format=None): # 可选的格式后缀
"""
列出所有的snippets,或者创建一个新的snippet。
"""
if request.method == 'GET':
snippets = Snippet.objects.all()
serializer = SnippetSerializer(snippets, many=True)
return Response(serializer.data) # return Response(data) 渲染成客户端请求的内容类型。 elif request.method == 'POST':
serializer = SnippetSerializer(data=request.data) # request.data # 处理任意数据 适用于'POST','PUT'和'PATCH'方法
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED) # status模块中的每个状态代码 return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @api_view(['GET', 'PUT', 'DELETE'])
def snippet_detail(request, pk, format=None): # 可选的格式后缀
"""
获取,更新或删除一个snippet实例。
"""
try:
snippet = Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET':
serializer = SnippetSerializer(snippet)
return Response(serializer.data, status=status.HTTP_200_OK) elif request.method == 'POST':
serializer = SnippetSerializer(snippet, data=request.data) # request.data可以处理传入的json请求,但它也可以处理其他格式。
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE':
snippet.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
8、效果
http http://127.0.0.1:8000/snippets/ Accept:application/json # 请求JSON
http http://127.0.0.1:8000/snippets.json # JSON后缀
# POST表单数据
http --form POST http://127.0.0.1:8000/snippets/ code="print 123"
02_Tutorial 2: Requests and Responses 请求和响应的更多相关文章
- 爬虫之requests的请求与响应
requests是基于urllib3的一个用于发起http请求的库(中文文档)数据采集流程: 指定url>> 基于 requests模块发起请求>> 获取响应中的数据>& ...
- Python+requests 发送简单请求--》获取响应状态--》获取请求响应数据
Python+requests 发送简单请求-->获取响应状态-->获取请求响应数据 1.环境:安装了Python和vscode编译器(Python自带的编译器也ok).fiddler抓包 ...
- API(二)之Requests and Responses
这一部分可以让返回的api信息以两种格式呈现:.json和.api REST框架的核心部分.我们来介绍几个基本的组成部分. Request objects REST框架引入了Request对象来扩展常 ...
- openresty(完整版)Lua拦截请求与响应信息日志收集及基于cjson和redis动态路径以及Prometheus监控(转)
直接上文件 nginx.conf #运行用户和组,缺省为nobody,若改为别的用户和组,则需要先创建用户和组 #user wls81 wls; #开启进程数,一般与CPU核数等同 worker_pr ...
- Java Servlet (1) —— Filter过滤请求与响应
Java Servlet (1) -- Filter过滤请求与响应 版本: Java EE 6 参考来源: Oracle:The Java EE 6 Tutorial: Filtering Reque ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(13)-Fiddler请求和响应断点调试
1.简介 Fiddler有个强大的功能,可以修改发送到服务器的数据包,但是修改前需要拦截,即设置断点.设置断点后,开始拦截接下来所有网页,直到取消断点.这个功能可以在数据包发送之前,修改请求参数:在收 ...
- requests发送HTTP请求
requests库是一个流行的用于发送Http请求的Python第三方库, 其设计简洁高效可以完美替代默认的urllib. 使用pip安装requests: pip install requests ...
- laravel请求到响应的生命周期
请求到响应的核个执行过程,主要可以归纳为四个阶段,即程序启动准备阶段.请求实例化阶段.请求处理阶段.响应发送和程序终止阶段. public\index.php中有这么一段代码 $app = requi ...
- 使用 requests 发送 GET 请求
基本用法: import requests req = requests.get("http://www.baidu.com/") //发起GET请求 print(req.text ...
随机推荐
- Ribbon源
在Riibon中一个非常重要的组件为LoadBalancerClient,它作为负载均衡的一个客户端 ServiceInstance choose(String serviceId); 从负载均衡器中 ...
- git出现Invalid path
今天换了电脑,我直接把整个仓库从电脑A复制到了电脑B,包括仓库下面的 .git 文件夹. 修改代码后我执行了一下 git add . 出现了一个报错 fatal: Invalid path 'D:/S ...
- Hi3531a海思logo加载的实现流程
海思篇之开机logo的加载(Hi3531a命令版) 2019-02-02 11:31:51 Wilburn0 阅读数 479更多 分类专栏: 海思开发 版权声明:本文为博主原创文章,遵循CC 4. ...
- Stack Overflow是如何做应用缓存的
首先要说下缓存是什么?缓存,就是在取出数据结果后,暂时将数据存储在某些可以快速存取的位置(例如各种NoSQL如Redis,HBase,又或MemoryCache等等),于是就可以让这些耗时的数据结果多 ...
- centos 7 配置pytorch运行环境
华为云服务器,4核心8G内存,没有显卡,性能算凑合,赶上双11才不到1000,性价比还可以,打算配置一套训练densenet的环境. 首先自带的python版本是2.7,由于明年开始就不再维护了,所以 ...
- thinkphp中 select() 和find() 方法的区别
$about=M('document'); $abouts=$about->where('id=2')->select(); $abouts2=$about->where('id=2 ...
- 链接标签<a>去掉下划线
1.去掉下划线 text-decoration:none:
- Java 之 ObjectOutputStream 类
ObjectOutputStream 类 1.概述 java.io.ObjectOutputStream extends OutputStream ObjectOutputStream:对象的序列化流 ...
- 苹果APP内购客户付款成功,没收到相应虚拟产品的解决办法
一.引导用户走申请苹果的退款 1.告知用户新版本可以使用支付宝.微信支付,更划算 2.苹果可申请90天以内的退款,一般情况申请后48小时内就有反馈. 参考链接 https://jingyan.baid ...
- 解决 google 浏览器记住密码导致输入框样式改变(变成淡黄色背景)
直接在页面上使用css代码: input:-webkit-autofill , textarea:-webkit-autofill, select:-webkit-autofill { -webkit ...