1,REST风格
- 资源 网页中能看到的都是资源
- uri 统一资源标识符
- url 统一资源定位符
- 统一资源接口
- 对资源的操作根据HTTP请求方式的不同进行不同的操作
- 遵循HTTP请求方式的语义
- 前后端传输的是资源的表述(前后端传输的是字符串的形式,每次传输时,都需要数据格式的转化)
- 展现的是资源的状态
2,凡是遵循REST风格实现的前后端交互都叫RESTful架构
- 核心思想:
- 面向资源去编程,url中尽量用名词,不要用动词
- 根据HTTP请求方式方式的不同对资源进行不同的操作(增删改查)
- 在url中的体现:
- 体现版本
- http://v2bootcss.com/
- http://bootcss.com/v2
- 体现是否是API
- https://v2.bootcss.com/api
- 有过滤条件
- https://v2.bootcss.com/course?page=1
- 体现版本
- 在返回值中
- 携带状态码
- 返回值
- get返回值查看的所有或者单条数据
- post 返回新增的这条数据
- put/patch 返回的是更新的这条数据
- delete 返回值空
- 携带错误信息
- 携带超链接
3,FBV和CBV的区别
- 3.1,FBV是一条路由对应一个视图函数
- 3.2,CBV是多条路由或一个路由对应一个业务处理的主要是在类中继承了View,会根据不同的请求方式,会执行相应的方法,具体代码如下:
# 先处理请求的方式,将大写转换成小写,然后判断是否存在于请求的方式中
# http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
if request.method.lower() in self.http_method_names:
# 如果存在相应的方法就通过反射执行相应的方法,反射的时候给一个默认值,当不存在相应的方法时就
# 就抛一个这样的错误:'Method Not Allowed (%s): %s', request.method, request.path,
# extra={'status_code': 405, 'request': request}
# )
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
# 否则也抛一个这样,此方法不被允许的错误:'Method Not Allowed (%s): %s', request.method, request.path,
# extra={'status_code': 405, 'request': request}
# )
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
4,在rest_framework中一般都用APIviw,(其实APIView是继承View的)
- 4.1,APIView继承了View
- 4.2,APIView重写了as_view以及dispatch方法
- 4.3,在dispatch里重新封装了request
- 4.3.1,request = Request()
- 旧的request变成了_request
- 4.4,get请求数据(此时的get是查看的意思)
- request.query_params
- 4.5,post请求的数据(此时的post是增加)
- request.data
具体代码如下:

5,rest_framework的安装(这是一个框架)
- 在cmd或者python的命令终端输入下载的命令:pip install djangorestframework
- 在setting的app中注册rest_framework
6,在python中的序列化的方法

总结:Python的数据类型转化成json格式的数据类型
- 第一版用values以及JsonResponse实现序列化
- 第二版用django的serialize实现序列化
-
- 缺点:不能很好的处理外键关系
- 第三版用DRF实现序列化
- 第一步声明序列化器
- 第二步使用我们的序列化器序列化queryset
- 把模型对象放入序列化器进行字段匹配
- 匹配上的字段进行序列化,匹配不上的丢弃
- 序列化好的数据存在于ser_obj.data中
- 外键关系的序列化是嵌套的序列化器对象,注意当时queryset时,要用many=True把一个个得到的对象传进去