drf01 web开发模式


drf01 web开发模式

web开发模式

# 前后端混合开发(前后端不分离),返回的是html的内容
# 前后端分离

1. 通过浏览器访问的应用程序都是Web应用
2. Web应用的模式:
	C/S架构
    	c:client 客户端
        s:server 服务端
    B/S架构
    	b:browser  浏览器
        s:server   服务端   
            
    # 本质上b/s也是c/s
 3. Web应用的优点:
	- 1. 只需要一个浏览器
    - 2. 节省客户端资源
    - 3. 只需要更新服务端,立马影响客户端
 4. Web应用的缺点:
    	- 1. 谷歌浏览器,火狐浏览器,ie浏览器,360浏览器.......
        - 2. 服务端宕机,客户端也立马宕机,不能访问
 5. Web框架
	在规定的位置,写固定的代码

前后端不分离

前后端分离

API接口

# 通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介

# 百度地区的请求

Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点

1.url:长得像返回数据的url链接
	https://api.map.baidu.com/place/v2/search   

2.请求方式:get、post、put、patch、delete
    采用get方式请求上方接口


3.请求参数:json或xml格式的key-value类型数据
    ak:6E823f587c95f0148c19993539b99295
    region:上海
    query:肯德基
    output:json
    
4.响应结果:json或xml格式的数据
	上方请求参数的output参数值决定了响应数据的格式
    https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&
        region=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&outpu=json
        # 百度地图提供的接口,后面可以拼接参数,会返回json格式的数据

接口测试工具:Postman

浏览器直接搜索:Postman下载
# 浏览器只能测试get请求的接口
# 通过postman工具可以测试任意个类型的请求方式:get,post,put,delete...
针对post请求的数据,编码方式有3种:
	1. urlencoded
    	在请求体中的格式:
        	name=ly&age=18  => request.POST
    2. form-data
    	# 上传文件
         # 普通数据
            	name=ly&age=18  => request.POST
         # 文件数据
        	-----dsadsadsadsadsad-----
            file数据    =>   request.FILES
    3. json
    	在请求体中的格式:
        	{"name":"ly", "age":18}  # 它在请求中就是原样
            
            '''
            	在Django中如何获取json格式的数据:
            		在request.POST中已经取不到值了,在request.body中取值
            '''
            # 针对request.body中的数据,需要自己处理
    
# form表单只能提交urlencoded, form-data, 不能提交json格式的数据
# 
''' form上传文件: 1. method='POST' 2. enctype='form-data' '''

序列化

api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:

# 序列化: 把我们识别的数据转换成指定的格式提供给别人。

    例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。

# 反序列化:把别人提供的数据转换/还原成我们需要的格式。

    例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中。

RESTful API规范

# RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。

# 10条
1. url链接一般都采用https协议进行传输
	http: 数据明文传输
    https:数据加密传输, http + ssl
    
2. 用api关键字标识接口url:
     https://api.baidu.com
	https://www.baidu.com/api
        
3. 在url链接中标识数据版本
    https://api.baidu.com/v1
    https://api.baidu.com/v2
        
4. 数据即是资源,均使用名词(可复数)  # 重点
	https://api.baidu.com/users
	https://api.baidu.com/books
	https://api.baidu.com/book	
        
 5.  资源操作由请求方式决定 (重点)  # 重点
    https://api.baidu.com/books - get请求:获取所有书
    https://api.baidu.com/books/1 - get请求:获取主键为1的书
    https://api.baidu.com/books - post请求:新增一本书书
    https://api.baidu.com/books/1 - put请求:整体修改主键为1的书 # 全部更新

    https://api.baidu.com/books/1 - patch请求:局部修改主键为1的书 # 局部更新
    https://api.baidu.com/books/1 - delete请求:删除主键为1的书
        
6. 过滤,通过在url上传参的形式传递搜索条件
	https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
	https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置
        
7. 响应状态码
	200, 301,302, 404, 403, 500
    # 业务状态码
    100001
    100002
    100003
8.  错误处理,应返回错误信息,error当做key
    {
        error: "无权限操作"
    }
    
9. 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范
	GET /books:返回资源对象的列表(数组)[{}, {}, {}]
    GET /books/1:返回单个资源对象 {}
    POST /books:返回新生成的资源对象
    PUT /books/1:返回完整的资源对象
    PATCH /books/1:返回完整的资源对象
    DELETE /books/1:返回一个空文档
    
10 需要url请求的资源需要访问资源的请求链接

	
    

drf的安装和简单使用

'''
	1. Django Rest_Framework 简称drf, 他就是django的第三方app
	2. pip3 install djangorestframework
	3. drf最新版本不支持django1.x, 升级django版本为:django2.x
'''

# 安装命令:
	pip3 install djangorestframework
    
# 使用:
	1.在settions.py中app里注册
    2.在models.py书写表模型
drf