一、restful规范

'''
它是一个规范,面向资源架构 十条规范
1.API与用户的通讯协议,总是使用HTTPs协议,确保了网络传输的安全性
2.域名
--https://api.example.com :尽量将API部署在专用域名(会存在跨域问题)
--https://example.org/api/ :这个写法简单,推荐使用
3.版本
--https://api.example.com/v1/ 把版本号放在请求头中
4.路径 在网络上任何东西都是资源,均使用名词表示(可复数)
--127.0.0.1/books/
5.method 通过请求方式来表示进行的操作
--127.0.0.1/books/ get请求:表示获取所有图书
--127.0.0.1/books/1 get请求:表示获取id为1的图书
--127.0.0.1/books/ post请求:表示新增一本书
--127.0.0.1/books/ delete请求:表示删除一本书
--127.0.0.1/books/ put/patch请求:表示修改一本书
6.过滤 通过在url上传参的形式传递搜索条件
7.状态码
1 开头: 服务器正在处理
2 开头: 服务器处理成功
3 开头: 重定向
4 开头: 客户端错误
5 开头: 服务器错误
--注意:再返回的数据中携带状态码
8.错误处理.应返回错误信息,error当做key
9.返回结果针对不同操作,返回数据格式不同
  --所有数据:列表
  --删除数据:返回一个空 {status:100,error:'删除成功!',data:''}
  --修改数据:{status:100,error:'修改成功!',data:{id:1,title:'西游记'}}
10.返回结果中提供链接

总结:必须说出来的就两条: 1.路径都用名词表示 2.请求方式不同,表示不同的操作
'''

二、CBV(View)源代码执行流程

'''
什么是闭包函数?
内部函数有对外部函数作用域的引用 getattr反射
handler是请求函数的内存地址
'''

路由层

#url是一个函数,第一个参数是正则表达式,第二个参数是函数的内存地址
url(r'^books/', views.Books.as_view()) #当程序启动的时候,url这个函数已经执行,第二个位置参数已经形成了一个函数的内存地址(as_view()返回值的是源代码中view这个函数的内存地址)
#比如来了一个get请求,拿到第二个位置参数内存地址加括号执行,其实就是view(request, *args, **kwargs),本质就是执行dispatch(request, *args, **kwargs)
#dispatch方法内部通过请求方式(get,post),反射出要执行的方法,去执行,然后返回(return handler(request, *args, **kwargs)) handler是请求函数的内存地址

业务逻辑层

from django.shortcuts import render,HttpResponse
from django.http import JsonResponse
from django.views import View class Books(View):
def get(self,request):
l1=[{'id':1,'title':'追风筝的人'},{'id':2,'title':'解忧杂货店'}]
#如果转列表一定要写safe=False,否则会报错 如果转字典不需要
return JsonResponse(l1,safe=False,json_dumps_params={'ensure_ascii':False})
def post(self,request):
return HttpResponse('ok')

三、drf框架安装和简单使用

'''
在Django中
urlencode编码
formdata编码
json编码:request.POST是没有值的,只能从body中取出,直接处理
-urlencode和formdata编码,request.POST可以提供值
'''
'''
drf框架
在原来django框架的基础上多做了一些事 安装:djangorestframework rest_framwork本质上是一个app,要使用它我们需要在settings中对其进行配置 只要用drf,以后写的都是cbv drf提供的:序列化组件 视图组件 解析器 认证组件 权限组件 频率组件 分页器 响应器 url控制器 版本控制
'''

路由层

url(r'^books/', views.Books.as_view())

业务逻辑层

from django.shortcuts import render,HttpResponse
from django.http import JsonResponse
from rest_framework.views import APIView
class Books(APIView):
def get(self,request):
l1=[{'id':1,'title':'追风筝的人'},{'id':2,'title':'解忧杂货店'}]
#如果转列表一定要写safe=False,否则会报错 如果转字典不需要
return JsonResponse(l1,safe=False,json_dumps_params={'ensure_ascii':False})
def post(self,request):
return HttpResponse('ok')

APIView的源码执行流程

'''
APIView继承的是View
比如①get请求来了,执行APIView中的as_view(),只要继承了APIView,都没有csrf校验了,源码中本质还是执行的View中的as_view方法内部的view闭包函数,view闭包函数中执行了dispatch方法
②先在业务逻辑层找有没有dispatch方法,没有直接到父类(APIView)中找,现在执行的不再是View中的dispatch方法,而是APIView的dispatch方法,返回一个request对象(这个request对象已经不是原生的request对象,但是内部包含了原生request对象),APIView中的dispatch方法中调用了initial方法,这个方法中包含了认证,权限以及频率组件
③dispatch方法内部通过请求方式(get,post),反射出要执行的方法,去执行 在rest_framwork中将原生request赋给了_request,在业务逻辑层request.GET仍可以使用,首先找自己request中有没有,如果没有,从self._request中找,就可以找到原生的request中的GET. 在drf框架中request.GET,request._request.GET以及request.query_params是一样的
request.data 这个data是post,put的内容都在里面
'''

一、restful规范 二、CBV(View)源代码执行流程 三、drf框架安装和简单使用的更多相关文章

  1. 《SpringMVC从入门到放肆》二、SpringMVC的执行流程及默认配置

    上一篇博文我们做了一个hello world的程序,并且已经成功的跑起来了.这一篇我们来深入的了解一下SpringMVC的执行流程以及一些其它的配置. 一.执行流程 来解释一下上图中的各个名词1.Di ...

  2. spark 源码分析之二十一 -- Task的执行流程

    引言 在上两篇文章 spark 源码分析之十九 -- DAG的生成和Stage的划分 和 spark 源码分析之二十 -- Stage的提交 中剖析了Spark的DAG的生成,Stage的划分以及St ...

  3. SpringMVC--从理解SpringMVC执行流程到SSM框架整合

    前言 SpringMVC框架是SSM框架中继Spring另一个重要的框架,那么什么是SpringMVC,如何用SpringMVC来整合SSM框架呢?下面让我们详细的了解一下. 注:在学习SpringM ...

  4. debian内核代码执行流程(三)

    接续<debian内核代码执行流程(二)>未完成部分 下面这行输出信息是启动udevd进程产生的输出信息: [ ]: starting version 175是udevd的版本号. 根据& ...

  5. Destoon二开必看执行流程

    <?php 代码首先包含common.inc.php文件 在common.inc.php文件中,首先定义常量. define('IN_DESTOON', true); define('IN_AD ...

  6. Golang(十二)TLS 相关知识(三)理解并模拟简单代理

    0. 前言 前面的介绍我们理解了数字签名等知识,同时学习了 OpenSSL 生成私钥和证书并验证 之前提过我们基于 BitTorrent 协议开发了一个 docker 镜像分发加速插件 中间涉及到了配 ...

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

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

  8. restful规范和drf模块

    restfu1规范 它是一个规范,面向资源架构 10条规范: 1.api与用户的通信协议,总是使用https协议 api网上提供的接口 2.域名: 尽量将api部署在专用域名(会存在跨域问题) API ...

  9. Springboot & Mybatis 构建restful 服务二

    Springboot & Mybatis 构建restful 服务二 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务一 2 restful ...

随机推荐

  1. Spark SQL 之 Join 实现

    原文地址:Spark SQL 之 Join 实现 Spark SQL 之 Join 实现 涂小刚 2017-07-19 217标签: spark , 数据库 Join作为SQL中一个重要语法特性,几乎 ...

  2. 每个JavaScript程序员都需要知道的5个数组方法

    Array.forEach() .forEach() 方法能够方便的让你 遍历数组里的每个元素,你可以在回调函数里对每个元素进行操作..forEach()方法没有返回值,你不需要在回调函数里写retu ...

  3. Windows 10 家庭版/专业版 彻底关闭windows update自动更新

    转载: https://blog.csdn.net/u014162133/article/details/84973426# https://blog.csdn.net/qq_40820862/art ...

  4. POJ 3264 线段树入门解题报告

    题意:给n个值, Q次询问, 每次询问给定一个区间, 要求输出该区间最大最小值之差 思路:暴力的话每次询问都要遍历多次for循环一定会超时, 用线段树记录区间的信息(左边界右边界, 该区间最大值最小值 ...

  5. 安装Linux系统,学习Linux操作基础

    20189230杨静怡 2018-2019-2 <移动平台开发实践>第1周学习总结 安装Linux系统内容总结 一.学习"基于VirtualBox虚拟机安装Ubuntu图文教程& ...

  6. Python3学习之路~5.12 hashlib & hmac & md5 & sha模块

    hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import md5 h ...

  7. java框架之Spring(1)-入门

    介绍 概述 Spring 是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring 是于 2003 年兴起的一个轻量级的 J ...

  8. python框架之Django(11)-中间件

    介绍 在django中,中间件其实就是一个类,在一个请求到来和这个请求结束之前,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的settings模块中,有一个 M ...

  9. linux 进程间通信——内存共享映射mmap和munmap

    IPC三种通信机制是指:信号量.共享内存.消息队列,   信号量:通过操作系统中的PV操作来实现: 共享内存:申请一块内存,进程A往共享内存中写,其他的进程就可以通过读出共享内存中的内容来获取进程A所 ...

  10. numpy 性能提升

    a = np.array([1,2,3,4,5,1,2,2,2])c = np.unique(a)print(c) 对于很大的稀疏矩阵,我们不能用a[a>0]去取大于0的元素,而应该使用np.w ...