一、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. python基础类型—列表

    列表 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li = [‘alex’ ...

  2. vue项目实战中的增、删、改、查

    参考:https://blog.csdn.net/xr510002594/article/details/81665762?utm_source=blogxgwz0 https://blog.csdn ...

  3. 下载JDK开发工具包

    实例说明 开发java程序必须有Java开发环境,即jdk开发工具包,这个工具包包含了编译.运行.调试等关键的命令.运行Eclipse.NetBeans等开发工具也需要有jdk或jre的支持. 关键技 ...

  4. mysql limit 性能问题分析

    问题重现 // todo 参考文章: MySQL 单表分页 Limit 性能优化 Scalable MySQL: Avoid offset for large tables 证明为什么用limit时, ...

  5. python全栈开发 * 26知识点汇总 * 180709

    26 logging collections random 模块 一.logging低配:日志不能写入文件与显示同时进行 import logging logging.basicConfig(leve ...

  6. lower_bound && upper_bound

     用lower_bound进行二分查找 ●在从小到大排好序的基本类型数组上进行二分查找. 这是二分查找的一种版本,试图在已排序的[first,last)中寻找元素value.如果[first,last ...

  7. 2019年3月8日A股百点暴跌行情思考

    本人操作: [海通证券]:早盘挂单并撤单,盘中高位卖出,尾盘低位接回. 总结 - 正确:持股数量不变,成本降低. [信雅达]:早盘低开加仓,盘中高位卖出,跌后接回,尾盘跌停. 总结 -  正确:加仓, ...

  8. Luogu 1023 - 税收与补贴问题 - [数学题]

    题目链接:https://www.luogu.org/problemnew/show/P1023 题目背景每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低 ...

  9. Python解析Linux命令行

    写了个python脚本在linux需要传入参数使用,python参数传入有几个方法, 先用了Python中命令行参数的最传统的方法sys.argv linux cmd ~& python ma ...

  10. listview添加数据

    1. 添加数据: ListView1.ViewStyle:=vsReport; ListView1.Columns.Add; ListView1.Columns[0].Caption:='aaaa'; ...