目录

http球球处理

请求与响应

Response

常用属性

状态码

http请求处理

drf除了在数据序列化部分简写代码之外,还在视图中提供了简写操作.所以在Django原有的Django.views.View类基础上,def封装了多个视图子类出来提供给我我们使用.

DjangoREST framwork 提供的视图的主要作用:

  • 控制序列化器的执行( 检验 ,保存 , 转换数据 )
  • 控制数据库查询的执行
  • 调用情趣类和响应类 ( 这俩个类也是由drf 帮我们再次扩展了一些功能类 )

为了方便我们的学习,所以先创建一个子应用req

python manage.py startapp req

注册子应用:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles', # 注册 rest_framework 的子应用
'rest_framework', 'students',
'sers',
'unsers',
'homework',
'req', # 请求与响应
]

注册路由:

# 子应用路由
from django.urls import path
from . import views
urlpatterns = [ ] # 总路由
from django.contrib import admin
from django.urls import path,include urlpatterns = [
path('admin/', admin.site.urls),
path('students/', include("students.urls")),
path('sers/', include("sers.urls")),
path('unsers/', include("unsers.urls")),
path('req/', include("req.urls")),
]

请求与响应

Request

REST framework 传入视图的 request对象不再是django 默认的HttPREQuser对象,而是RESTframework 提供的扩展了HttpRequest类的Request类的对象.

REST framework 提供了Parser 解释器, 在接收到请求后自动根据Content-Type指明的请求数据类型( 如JSON,表单等) 将请求数据进行Parse解析, 解析为类字典( Query Dict) 对象保存到Request对象中.

Request对象的数据是自动根据前端发送的数据的格式进行解析之后的结果.

无论前端发送的那种格式的数据, 我们都可以以统一的方式读取数据.

常用属性

1 )  .data

request.data 返回解析之后的< mark> 请求体</mark>数据.类似于Django中标准的 request>POST 和 request.FILES 属性, 提供如下特性:

  • 包含了解释器之后的文件和非文件数据
  • 包含了对POST,PUT ,PATCH请求方式解析后的数据
  • 利用了REST framework 的怕热色人生解析器 不仅支持表单类型的数据,也支持JSON数据

2 ) .query_params

request.query_params 返回解析之后的<mark>查询字符串</mark>数据

request.query_params 与Django标准的 requestGET相同,只是更换了正确的名称而已.

Response

rest_framework.response.Response

REST framework提供了一个相应类 Response,使用该类构造响应对象时, 响应的具体数据内容会被转换( render 渲染器 ) 成符合前端需求的类型.

REST framework 提供了 Render而渲染器 用来根据请求头中的 Accept ( 请求数据类型声明) 来自动转换响应数据到对应格式. 如果前端请求中未进行Accept声明,则会采用默认方式处理响应数据,我们可以通过配置来修改默认响应格式. ( 简而言之, 就是Render而能通过请求找到Accept查询出客户端支持和希望的数据类型, 把视图的结果以客户端能识别的格式返回 )

可以在rest_framework.settings.py查找所有的drf默认配置项

REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类
'rest_framework.renderers.JSONRenderer', # json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览器API渲染器
)
}

构造方式

Response(data, status=None, template_name=None, headers=None, content_type=None)

data数据不要是render处理之后的数据, 只需要传递Python的内建类型数据即可,REST framework会使用 Render而渲染器处理data.

data不能是复杂结构的数据, 如Django的模型类对象,对于这样的数据我们可以使用 serializer 序列化器序列化处理后 ( 转为Python字典类型 ) 再传递给data参数.

参数说明:

  • data:为响应准备的序列化处理后的数据
  • status: 状态码 ,默认200
  • template_name: 模板名称, 如果使用HTMLRenderer 时需要指明
  • headers_ type: 响应数据的Content_Type, 通常此参数无需传递,REST framework 会根据前端所需要类型数据来设置该参数.

常用属性

1  ) .data

传给response对象的序列化后, 但尚未render处理的数据

2  ) .status_code

状态码的数据

3  ) .comtent

经过render处理的响应数据

状态码

为了方便状态码,REST framework在 rest-framework.status 模块中提供了常用的状态码常量.

1 ) 消息告知 -1xx

HTTP_100_CONTINUE
HTTP_101_SWITCHING_PROTOCOLS

2  0 成功 -2xx

HTTP_200_OK
HTTP_201_CREATED
HTTP_202_ACCEPTED
HTTP_203_NON_AUTHORITATIVE_INFORMATION
HTTP_204_NO_CONTENT
HTTP_205_RESET_CONTENT
HTTP_206_PARTIAL_CONTENT
HTTP_207_MULTI_STATUS

3  ) 重定向 -3xx

HTTP_300_MULTIPLE_CHOICES
HTTP_301_MOVED_PERMANENTLY
HTTP_302_FOUND
HTTP_303_SEE_OTHER
HTTP_304_NOT_MODIFIED
HTTP_305_USE_PROXY
HTTP_306_RESERVED
HTTP_307_TEMPORARY_REDIRECT

4   ) 客户端错误 -4xx

HTTP_400_BAD_REQUEST
HTTP_401_UNAUTHORIZED
HTTP_402_PAYMENT_REQUIRED
HTTP_403_FORBIDDEN
HTTP_404_NOT_FOUND
HTTP_405_METHOD_NOT_ALLOWED
HTTP_406_NOT_ACCEPTABLE
HTTP_407_PROXY_AUTHENTICATION_REQUIRED
HTTP_408_REQUEST_TIMEOUT
HTTP_409_CONFLICT
HTTP_410_GONE
HTTP_411_LENGTH_REQUIRED
HTTP_412_PRECONDITION_FAILED
HTTP_413_REQUEST_ENTITY_TOO_LARGE
HTTP_414_REQUEST_URI_TOO_LONG
HTTP_415_UNSUPPORTED_MEDIA_TYPE
HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE
HTTP_417_EXPECTATION_FAILED
HTTP_422_UNPROCESSABLE_ENTITY
HTTP_423_LOCKED
HTTP_424_FAILED_DEPENDENCY
HTTP_428_PRECONDITION_REQUIRED
HTTP_429_TOO_MANY_REQUESTS
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS

5   ) 服务器错误  -5xx

HTTP_500_INTERNAL_SERVER_ERROR
HTTP_501_NOT_IMPLEMENTED
HTTP_502_BAD_GATEWAY
HTTP_503_SERVICE_UNAVAILABLE
HTTP_504_GATEWAY_TIMEOUT
HTTP_505_HTTP_VERSION_NOT_SUPPORTED
HTTP_507_INSUFFICIENT_STORAGE
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED

drf (学习第二部)的更多相关文章

  1. Vue 学习第二部

    目录 通过axios实现数据请求 json json数据的语法 js中是提供的接送数据转换方法 ajax 数据接口 ajax的使用 同源策略 ajax跨域(跨源)方案之cors 组件化开发 组件[co ...

  2. Django (学习第二部 ORM 模型层)

    Django对数据库的操作 Django的 ORM 简介 ORM操作 (增删改查) ORM操作数据库的增删改查 ORM创建表关系 ORM中常用字段及参数 数据库的查询优化 ORM中如何开启事务 ORM ...

  3. bgp选路原则【第二部】

    面向逻辑谈bgp选路原则(第二部) 终于到了BGP终极解析的第二部曲--BGP选路原则.与题目相呼应,我不会直接介绍选路原则的规则,而是从时间逻辑和空间逻辑上将所有的选路原则分层分类.因为只有从这种角 ...

  4. 15.DRF学习以及相关源码阅读

    1.http请求协议 代码很枯燥,结果和奇妙. 1.cbv django.vuews import View classs LoginView(View): def get(self,requset) ...

  5. 前端学习 第二弹: JavaScript中的一些函数与对象(1)

    前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...

  6. 二、Android学习第二天——初识Activity(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...

  7. python学习第二讲,pythonIDE介绍以及配置使用

    目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...

  8. python学习第二次笔记

    python学习第二次记录 1.格式化输出 name = input('请输入姓名') age = input('请输入年龄') height = input('请输入身高') msg = " ...

  9. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

随机推荐

  1. Envoy 代理中的请求的生命周期

    Envoy 代理中的请求的生命周期 翻译自Envoy官方文档. 目录 Envoy 代理中的请求的生命周期 术语 网络拓扑 配置 高层架构 请求流 总览 1.Listener TCP连接的接收 2.监听 ...

  2. vue中axios的使用

    新开了一个vue项目,从头到尾都是一个人做的,所以就自己配置了一个axios.js文件 第一种方法.使用axios 需要下载安装   npm install axios,下载完成之后 在main.js ...

  3. pwnable.kr-coin1-witeup

    是一个小游戏,会给100堆小硬币,在每堆硬币中找到假币(重量为9,其他重量为10),其中每堆硬币都设置了金币数和固定的尝试次数. 思路是:在每堆硬币中,在有限的尝试次数中对硬币通过二分法计算硬币重量不 ...

  4. C# lock 死锁问题排查方法

    多线程程序发生死锁,某些重要线程卡住,不正常工作.排查起来非常麻烦.以下内容记录排查方法 1.确定死锁的位置,一般死锁会lock到某一行具体的代码,比如我就死锁在类似如下代码中 public void ...

  5. DES加解密算法(C语言实现)

    DES加密和解密算法的实现(C语言) 主要是做个记录,害怕以后代码丢了,先放到这里了. DES再不进行介绍了,可以看上一篇的 DES 的python实现 转载请注明出处:https://www.cnb ...

  6. MQTT消息队列压力测试

    环境准备: jmeter插件下载:mqttxmeter1.0.1jarwithdependencies.jar 把MQTT插件放在 %JMeter_Home%/lib/ext下.重启jmeter. M ...

  7. PicGo图床与Typora(PicGo+Typora+GitHub的完整设置)

    PicGo图床与Typora(PicGo+Typora+GitHub的完整设置) 如何更方便的用markdown写文章,接下来按照我的步骤来,你一定可以的,这个文章包含了GitHub图床配置.PicG ...

  8. JVM 第三篇:Java 类加载机制

    本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 什么是类的加载? 类的加载指的是将类的 .class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 ...

  9. Apple uses Multipath TCP

    http://blog.multipath-tcp.org/blog/html/2018/12/15/apple_and_multipath_tcp.html December 15, 2018 Ap ...

  10. 怎么快速从产品助理/初级 PM 成长为高级 PM?

    一般想成为一枚产品经理的同学,如果没有经过系统的学习,都是从产品专员/助理开始做起的~ 那要想快速从产品助理/初级 PM 成长为高级 PM,以下这几点必不可少 直接上干货~ 全文篇幅较长,可以点赞收藏 ...