一、请求对象(Request objects)
 
DRF引入了一个扩展Django常规HttpRequest对象的Request对象,并提供了更灵活的请求解析能力
Request对象的核心功能是request.data属性,它与request.POST类似,但对于WebApi更为有用
request.POST #只处理表单数据,只适用于post方法
request.data #处理任意数据 post、put和patch等方法
request.data可以是任意类型的数据,最终都会被处理正确响应给客户端
 
二、响应对象(Response objects)
DRF同时还引入了一个Response对象,这是一种尚未对内容进行渲染的TemplateResponse类型,并使用协商的结果来确定返回给客户端正确的内容类型
return Response(data) # 渲染成客户端请求的内容类型
 
三、状态码 (status codes)
在前后端分离的RESTful模式中,我们不能简单、随意的返回响应,而是需要使用http规定的,大家都认可的状态码形式
在视图中使用纯数字的http状态码不是很容易被理解,很容易被忽悠,rest框架为status模块中的每个状态代码 (如 http_400_BAD_REQUEST )提供了更明确的标识符,使用它们来代替纯数字的http状态码
 
四、封装API视图
rest框架提供了三种可用于编写API视图的包装饰器(wrappers)
1.基于函数视图的@api_view装饰器
2.基于类视图的APIView类系列
3.基于viewset视图集的类系列
这些包装饰器提供了一些功能,例如确保你在视图中接收到Request实例,并将上下文添加到Response,以便可以执行内容协商的约定
包装饰器还提供了诸如在适当时候返回 405 Method Not Allowed之类的响应,并处理在使用格式错误的输入来访问request.data时发生的任何ParseError异常
 
五、@api_view使用
from rest_framework import status  # rest框架提供的状态码模块
from rest_framework.decorators import api_view # api_view装饰器
from rest_framework.response import Response # drf response对象
from snippets.models import Snippet
from snippets.serializers import SnippetSerizlizer # 应用api_view装饰器声明该视图是drf视图,而不是原生视图
# 装饰器列表传参 声明该视图处理哪种类型的请求
@api_view(['GET', 'POST'])
def snippet_list(request):
if request.method == 'GET':
snippets = Snippet.objects.all()
serizlizer = SnippetSerizlizer(snippets, many=True)
return Response(serizlizer.data) if request.method == 'POST':
# request.data用默认的解析器已经将数据解析称json,就不用再专门解析一次
# 因为request.data可以是任意类型的数据,最终都会被处理正确响应给客户端
serializer = SnippetSerizlizer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 

8.DRF请求响应和api_view的更多相关文章

  1. 使用PHP实现请求响应和MySql访问

    在iOS开发当中经常需要使用来自后台的数据,所以使用一种很简便的写后台的方法. 首先,安装XAMPP,这是一个集成好的阿帕奇+MySQL环境,点击按钮即可开启服务,不需要进行任何环境配置. 然后,开启 ...

  2. HTTP协议的请求与响应和CSS属性和定位

    HTTP协议的请求与响应和CSS属性和定位 一.HTTP协议 1.1 HTTP定义 HTTP(Hypertext Transport Protocol),超文本传输协议. 一种详细规定了浏览器和web ...

  3. drf请求模块分析

    一.drf请求模块 .drf的request是在wsgi的request基础上再次封装 .wsgi的request作为drf的request一个属性:_request .新的request对旧的req ...

  4. DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render

    DRF框架    全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...

  5. drf复习(一)--原生djangoCBV请求生命周期源码分析、drf自定义配置文件、drf请求生命周期dispatch源码分析

    admin后台注册model  一.原生djangoCBV请求生命周期源码分析 原生view的源码路径(django/views/generic/base.py) 1.从urls.py中as_view ...

  6. drf:restful概念,类继承关系,drf请求封装,drf请求流程,版本控制组件,认证组件(token),权限组件

    1.restful规范 resfful规范的概念最重要: 是一套规范,规则,用于程序之间进行数据交换的约定. 他规定了一些协议,对我们感受最直接的就是,以前写增删改查的时候需要些四个视图寒素,rest ...

  7. Django(48)drf请求模块源码分析

    前言 APIView中的dispatch是整个请求生命过程的核心方法,包含了请求模块,权限验证,异常模块和响应模块,我们先来介绍请求模块 请求模块:request对象 源码入口 APIView类中di ...

  8. JavaEE:response响应和request请求

    Web服务器接收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象既然代表请求和响应,那么我 ...

  9. DRF 请求生命周期以及各模块解析

    目录 rest_framework框架的封装特点 原生Django与DRF比较 APIView 的请求生命周期 请求模块(request) 解析模块(parser_classes) 异常模块(exce ...

随机推荐

  1. 巨变!a16z 关于新一代数据基础设施架构的深度洞察

    点击上方 蓝字关注我们 来源 | a16z 作者 | Matt Bornstein, Martin Casado,Jennifer Li 翻译 | 夕颜 作为未来最重要的基础设施之一,数据正在成为各行 ...

  2. Spring源码 20 手写模拟源码

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...

  3. feign远程调用出错

    如果你传递的参数,比较复杂时,默认会采用POST的请求方式. 传递单个参数时,推荐使用@PathVariable,如果传递的单个参数比较多,这里也可以采用@RequestParam,Feign接口中不 ...

  4. “判断性别”Demo需求分析和初步设计(中)

    大家好~我开设了"深度学习基础班"的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序 线上课程资料: 本节课录像回放 加QQ群,获得 ...

  5. mybatisplus-sql注入器

    sql注入器 使用mybatisplus只需要继承BaseMapper接口即可使用:但是有新的需求需要扩展BaseMapper里面的功能时可使用sql注入器. 扩展BaseMapper里面的功能 点击 ...

  6. idea中无法在@Test 之下使用Scanner

    //如何解决idea中无法在 @Test 之下使用Scanner@Testpublic void testInsert(){ Scanner scanner = new Scanner(System. ...

  7. ClickHouse与Elasticsearch压测实践

    1 需求分析 1.1 分析压测对象 1)什么是ClickHouse 和Elasticsearch ClickHouse 是一个真正的列式数据库管理系统(DBMS).在 ClickHouse 中,数据始 ...

  8. Hadoop相关WebUI端口记录

    以下均为默认端口号,可根据配置文件修改:HDFS:50070yarn:8088Hive:10002HBase:60010Spark:8080Flink:8081Storm:8080

  9. 【原创】K8S环境下研发如何本地调试?kt-connect使用详解

    K8S环境下研发如何本地调试?kt-connect使用详解 背景 注:背景有点啰嗦,讲讲一路走来研发本地调试的变化,嫌烦的可以直接跳过,不影响阅读. 2019年 我在的公司当时是个什么情况,只有两个J ...

  10. Typora破解下载

    Typora破解下载 文章指路