restful规范和APIView

django生命周期

	1.先进入wsgi协议的web服务器
	2.进入django的中间件
	3.路由
	4.视图
	5.取模板,取数据,用数据渲染模板
	6.返回模板的字符串
	7.在wsgi中封装后发送给浏览器

开发模式

1.前后端不分离项目
	可以使用django的模板语法进行渲染
2.前后端分离
	前端和后端通过json格式数据交互

cbv源码分析

路由如果这么配置:url(r'^test/',views.test.as_views())
	请求通过中间件后进入路由,根据路由匹配,一旦成功,会执行后面函数(request),本质就是执行了as_view内部的view函数,内部有调用了self.dispatch。根据请求方式,执行不同的方法(必然get请求,就会执行我们写的视图的get方法)
	尝试自己封装一个APIView,重写dispatch方法,在执行父类的dispatch之前,写一些逻辑,请求来了,就会执行这些逻辑

APIView的dispath方法

	1.对原生request对象做了一层包装(面向对象的封装),以后再用的request对象都是新的request对象
	2.在APIView中self.initial(request,*args,**kwargs),里面有频率控制,权限控制和认证相关
	3.根据请求方法执行我们写的视图类中的相应方法
		视图类中方法的request对象,已经变成了封装后的request

Request类

	1.原生的request是self.request
	2.取以post形式提交的数据,从request.data中取(urlencoded,formdata,json格式)
	3.query_params就是原生request的GET的数据
	4.上传的文件是从FILES中取
	5.(重点)其他的属性,直接request.属性名(因为重写了__getattr__方法)

restful规范

面向资源架构
	1.API与用户通信协议,总是使用Https协议(相比http有加密的功能)
	2.域名有区分
		-https://api.example.com
		-https://example.org/api/
	3.版本
		-可以放在路径中
		-可以放在请求头中
	4.路径
		视网络上任何东西都是资源,均使用名词表示(重点)
		-https://api.example.com/v1/zoos
	5.通过method区分是什么操作
		-get表示获取
		-post表示新增
		-delete表示删除
		-patch/put表示修改
	6.过滤
		通过url上传参的形式传递搜索条件
	7.状态码
		{'status_code':100}
	8.错误处理,应返回错误信息
		{'status_code':100,'msg':'登录成功'}
		{'status_code':101,'msg':'用户错误'}
	9.返回结果,针对不同操作,服务器向用户返回的结果
		-get获取所有资源/get获取一个资源
            -127.0.0.1/api/vi/books 获取所有图书
				{'status_code':100,'msg':'获取成功',data:'[{},{}]'}
            -127.0.0.1/api/vi/books/3 获取id为3的图书
            	{'status_code':100,'msg':'获取成功',data:{name:xx...}}
            	-新增数据,把新增的数据再返回
            	-修改了数据,返回完整的资源对象
            	-删除数据,返回一个空文档
	10.返回结果中提供链接
posted @ 2019-07-01 20:59  Mr-Bear  阅读(310)  评论(0编辑  收藏  举报