DRF第一天


DRF第一天

今日内容概要

  • Web应用是什么
  • Web开发模式
  • API接口
  • postman的使用(apizza)
  • Restful规范
  • 序列化和反序列化
  • DRF的简介和安装

今日内容详细

Web应用是什么

1. 通过浏览器访问的应用程序都是Web应用
2. 应用程序的两种模式:
	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. 服务端宕机,客户端也立马宕机,不能访问

Web开发模式

1. 前后端不分离,混合开发,把html等静态文件写到我们的python中
2. 前后端分离,前端单独一个项目,后端单独一个项目,后端只需要提供接口,并且以json格式返回
  目前,主流项目都是前后端分离,老项目大多是混合开发

API接口

# 规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
类似于:https://api.map.baidu.com/place/v2/search
#特点:
	1.url:长得像返回数据的url链接
    2.请求方式:get、post、put、patch、delete
    3.请求参数:json或xml格式的key-value类型数据
    4.响应结果:json或xml格式的数据
    	上方请求参数的参数值决定了响应数据的格式

接口测试工具: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中的数据是二进制 bytes类型,需要自己处理
            # json.loads(request.body) => 字典
    
# form表单只能提交urlencoded, form-data, 不能提交json格式的数据
# 
''' form上传文件: 1. method='POST' 2. enctype='form-data' '''

RESTful API规范

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

# 10条 不用全记住 记住关键的3-5条
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. 响应状态码
	200301302404403500
    # 业务状态码
    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请求的资源需要访问资源的请求链接

	
    

序列化

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

Django Rest_Framework

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

drf