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

  1. # request.data # 处理任意数据 适用于'POST','PUT'和'PATCH'方法
  1. # request.data可以处理传入的json请求,但它也可以处理其他格式。

3、返回对象:Response

  1. # return Response(data) 渲染成客户端请求的内容类型。

4、status code

  1. from rest_framework import status # status模块中的每个状态代码
  1. return Response(status=status.HTTP_404_NOT_FOUND)

5、API views

  1. # 基于函数视图, 编写API视图的包装器 等价于 基于类视图的APIView类
  1. @api_view(['GET', 'POST'])
  1. @api_view(['GET', 'PUT', 'DELETE'])

REST框架提供了两个可用于编写API视图的包装器(wrappers)。

  1. 用于基于函数视图的@api_view装饰器。
  2. 用于基于类视图的APIView类。

6、可选格式后缀

视图中

  1. def snippet_detail(request, pk, format=None)
  1. def snippet_list(request, format=None)

urls

  1. from rest_framework.urlpatterns import format_suffix_patterns # 可选的格式后缀
  1. urlpatterns = format_suffix_patterns(urlpatterns)

7、代码

  1. # ## Tutorial 2: Requests and Responses
  2.  
  3. from rest_framework import status # status模块中的每个状态代码
  4. from rest_framework.decorators import api_view
  5. from rest_framework.response import Response
  6. from snippets.models import Snippet
  7. from snippets.serializers import SnippetSerializer
  8.  
  9. @api_view(['GET', 'POST']) # 基于函数视图, 编写API视图的包装器 等价于 基于类视图的APIView类
  10. def snippet_list(request, format=None): # 可选的格式后缀
  11. """
  12. 列出所有的snippets,或者创建一个新的snippet。
  13. """
  14. if request.method == 'GET':
  15. snippets = Snippet.objects.all()
  16. serializer = SnippetSerializer(snippets, many=True)
  17. return Response(serializer.data) # return Response(data) 渲染成客户端请求的内容类型。
  18.  
  19. elif request.method == 'POST':
  20. serializer = SnippetSerializer(data=request.data) # request.data # 处理任意数据 适用于'POST','PUT'和'PATCH'方法
  21. if serializer.is_valid():
  22. serializer.save()
  23. return Response(serializer.data, status=status.HTTP_201_CREATED) # status模块中的每个状态代码
  24.  
  25. return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
  26.  
  27. @api_view(['GET', 'PUT', 'DELETE'])
  28. def snippet_detail(request, pk, format=None): # 可选的格式后缀
  29. """
  30. 获取,更新或删除一个snippet实例。
  31. """
  32. try:
  33. snippet = Snippet.objects.get(pk=pk)
  34. except Snippet.DoesNotExist:
  35. return Response(status=status.HTTP_404_NOT_FOUND)
  36.  
  37. if request.method == 'GET':
  38. serializer = SnippetSerializer(snippet)
  39. return Response(serializer.data, status=status.HTTP_200_OK)
  40.  
  41. elif request.method == 'POST':
  42. serializer = SnippetSerializer(snippet, data=request.data) # request.data可以处理传入的json请求,但它也可以处理其他格式。
  43. if serializer.is_valid():
  44. serializer.save()
  45. return Response(serializer.data, status=status.HTTP_200_OK)
  46. return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
  47.  
  48. elif request.method == 'DELETE':
  49. snippet.delete()
  50. return Response(status=status.HTTP_204_NO_CONTENT)

8、效果

  1. http http://127.0.0.1:8000/snippets/ Accept:application/json # 请求JSON
  1. http http://127.0.0.1:8000/snippets.json # JSON后缀
  1. # POST表单数据
  2. http --form POST http://127.0.0.1:8000/snippets/ code="print 123"

02_Tutorial 2: Requests and Responses 请求和响应的更多相关文章

  1. 爬虫之requests的请求与响应

    requests是基于urllib3的一个用于发起http请求的库(中文文档)数据采集流程: 指定url>> 基于 requests模块发起请求>> 获取响应中的数据>& ...

  2. Python+requests 发送简单请求--》获取响应状态--》获取请求响应数据

    Python+requests 发送简单请求-->获取响应状态-->获取请求响应数据 1.环境:安装了Python和vscode编译器(Python自带的编译器也ok).fiddler抓包 ...

  3. API(二)之Requests and Responses

    这一部分可以让返回的api信息以两种格式呈现:.json和.api REST框架的核心部分.我们来介绍几个基本的组成部分. Request objects REST框架引入了Request对象来扩展常 ...

  4. openresty(完整版)Lua拦截请求与响应信息日志收集及基于cjson和redis动态路径以及Prometheus监控(转)

    直接上文件 nginx.conf #运行用户和组,缺省为nobody,若改为别的用户和组,则需要先创建用户和组 #user wls81 wls; #开启进程数,一般与CPU核数等同 worker_pr ...

  5. Java Servlet (1) —— Filter过滤请求与响应

    Java Servlet (1) -- Filter过滤请求与响应 版本: Java EE 6 参考来源: Oracle:The Java EE 6 Tutorial: Filtering Reque ...

  6. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(13)-Fiddler请求和响应断点调试

    1.简介 Fiddler有个强大的功能,可以修改发送到服务器的数据包,但是修改前需要拦截,即设置断点.设置断点后,开始拦截接下来所有网页,直到取消断点.这个功能可以在数据包发送之前,修改请求参数:在收 ...

  7. requests发送HTTP请求

    requests库是一个流行的用于发送Http请求的Python第三方库, 其设计简洁高效可以完美替代默认的urllib. 使用pip安装requests: pip install requests ...

  8. laravel请求到响应的生命周期

    请求到响应的核个执行过程,主要可以归纳为四个阶段,即程序启动准备阶段.请求实例化阶段.请求处理阶段.响应发送和程序终止阶段. public\index.php中有这么一段代码 $app = requi ...

  9. 使用 requests 发送 GET 请求

    基本用法: import requests req = requests.get("http://www.baidu.com/") //发起GET请求 print(req.text ...

随机推荐

  1. STL源码剖析——空间配置器Allocator#2 一/二级空间配置器

    上节学习了内存配置后的对象构造行为和内存释放前的对象析构行为,在这一节来学习内存的配置与释放. C++的内存配置基本操作是::operator new(),而释放基本操作是::operator del ...

  2. Redis 的基本操作、Key的操作及命名规范

    Redis基本操作 查看数据的状态 pong redis 给我们返回 PONG,表示 redis 服务 运行正常 redis 默认用 使用 16 个 库 • Redis 默认使用 16 个库,从 0 ...

  3. python之numpy和pandas

    一.numpy矩阵的拼接合并 列拼接:np.column_stack() >>> import numpy as np >>> a = np.arange(9).r ...

  4. 怎样理解window对象的几组位置大小属性

    第一组: window.screenX 和 window.screenY, 只读, 返回浏览器窗口左上角与屏幕左上角的水平距离和垂直距离(单位像素); 第二组: window.innerHeight ...

  5. Golang安装和配置

    Golang安装和配置 Linux Golang 下载源码,解压. # /home/superpika为你的主目录 mkdir /home/superpika/go mkdir /home/super ...

  6. #448 div2 a Pizza Separation

    A. Pizza Separation time limit per test1 second memory limit per test256 megabytes inputstandard inp ...

  7. Python之算法模型-5.1

    一.这里学习的算法模型包含监督学习和非监督学习两个方式的算法. 其中监督学习的主要算法分为(分类算法,回归算法),无监督学习(聚类算法),这里的几种算法,主要是学习他们用来做预测的效果和具体的使用方式 ...

  8. XPATH中text()和string()的使用区别

    <table style="WIDTH: 95.45%; BORDER-COLLAPSE: collapse; EMPTY-CELLS: show; MARGIN-LEFT: 4.55 ...

  9. win7 ReadyBoot 文件位置修改

    右键我的电脑,依次点开系统工具-性能-数据收集器集-系统-事件跟踪会话 在右边找到ReadyBoot,右键打开属性,会话框上方选择文件,根据示例文件名的路径找到ReadyBoot.etl文件,复制到你 ...

  10. ElementUI+命名视图实现复杂顶部和左侧导航栏

    在了解了命名视图的用途后,发现用命名视图来实现复杂导航更加省力.更多知识请参考这里 这里只说明重要配置内容,其他内容配置请参考上一篇初始版本: ElementUI 复杂顶部和左侧导航栏实现 或参考文末 ...