一、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. Nodejs exec和spawn的区别

    spawn child_process.spaen会返回一个带有stdout和stderr流的对象.你可以通过stdout流来读取子进程返回给Node.js的数据. stdout拥有’data’,’e ...

  2. 有趣的JavaScript隐式类型转换

    JavaScript的数据类型是非常弱的(不然不会叫它做弱类型语言了)!在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加.之所以不同的数据类型之间可以做运算,是因为 ...

  3. oracle忘记密码用户名被锁定_解决方案

    本方案参考http://www.cnblogs.com/iosundersunshine/p/5313174.html 解决方案(window): 进入cmd命令 按照图上五步,即可 1,输入 ech ...

  4. jQuery实现限制input框 textarea文本框输入字符数量的方法

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. spark-sql(spark sql cli)客户端集成hive

    1.安装hadoop集群 参考:http://www.cnblogs.com/wcwen1990/p/6739151.html 2.安装hive 参考:http://www.cnblogs.com/w ...

  6. 【Python全栈-后端开发】Django进阶之Model操作复习

    Django进阶之Model操作复习 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - ...

  7. java框架之SpringBoot(15)-安全及整合SpringSecurity

    SpringSecurity介绍 Spring Security 是针对 Spring 项目的安全框架,也是 Spring Boot 底层安全模块默认的技术选型.它可以实现强大的 Web 安全控制.对 ...

  8. python框架之Django(16)-接入Redis

    准备 安装Redis 参考 Ubuntu 中 Redis 的安装与使用. 在python中使用Redis 参考 python 中使用 Redis . 安装依赖包 在 Django 中接入 Redis ...

  9. 去掉Tomcat的管理页面

    一.去掉Tomcat的管理页面 一.方法一:如果要去掉默认该界面,可以重命名tomcat目录下的ROOT,并新建空文件夹命名为ROOT 1.刚打开tomcat,默认访问的是tomcat管理页面,比如X ...

  10. 使用PageHelper插件分页结合mybatis返回的列表个数不对问题解决

    问题描述:spring mvc+mybatis项目中,当使用PageHelper插件进行分页查询时,查到的总数据量值是正确的,但是查询当前页返回的列表个数不对.比如每页查询10条,返回2条或者3条.r ...