接口

"""
1、什么是接口:url+请求参数+响应数据 | 接口文档

2、接口规范:
url:https,api,资源(名词复数), v1,get|post表示操作资源的方式, ?过滤条件
响应数据:status,msg,results|data,url资源数据
"""

DRF入门

"""

1、封装风格

2、请求生命周期:走APIView的as_view => View的as_view调用APIView的dispatch => 分发给视图类的请求函数 => 响应

3、请求模块:二次封装request

4、解析模块:局部全局配置,form-data、urlencoding、json

5、渲染模块:局部全局配置,html、json

6、响应模块:Response(data, http_status, header)
data={'detail': serializer_obj.errors} => http_status=4..|5..
# 4,5开头字段状态码,前台axios请求响应会解析到catch分支
axios({}).then().catch() 7、二次封装Response:
i) 继承Response
ii) 自定义参数格式化成data,传给 super().__init__(data=data)
iii) 网络状态码、响应头等信息带给super().__init__() 8、异常模块:在请求生命周期中,分发请求任务执行时,被一个超大的try except包裹,一旦出现任何异常,都会交给exception_handler函数处理
自定义原因:系统只处理了部分,所以手动还需要处理;后期异常信息需要记录到日志文件
工作流程:先交给drf处理异常,如果有响应结果,代表drf已处理,如果是None,自己处理
"""

序列化组件

# 1)可以将model对象序列化成可以返回给前台的json数据
# 2)可以校验前台传来的数据,完成model的增与改

模型层

class User(models.Model):
name = models.CharField(max_length=16) # 自定义插拔序列化字段 - 完成连表深度查询
@property
def my_name(self):
return self.name

序列化层

class UserListSerializer(serializers.ListSerializer):
def update(self, instance, validated_data):
for index, obj in enumerate(instance):
self.child.update(obj, validated_data[index])
return instance class UserModelSerializer(serializers.ModelSerializer):
# 自定义反序列化不入库字段 - 要在钩子函数校验后移除
check_name = serializers.CharFiled(write_only=True)
class Meta:
model = User
fields = ['name', 'my_name', 'check_name']
extra_kwargs = {
'my_name': {
'read_only': True
}
}
# 群改
list_serializer_class = UserListSerializer
# 局部、全局钩子
# create、update方法不需要重写,可以完成单增、群增、单改

视图层

class UserAPIView(APIView):
def get(self, request, *args, **kwargs):
# 先orm得到 user_query | user_obj # 在得到序列化对象
user_ser = UserModelSerializer(user_query, many=True)
user_ser = UserModelSerializer(user_query, many=False) # 返回序列化结果 user_ser.data
def post(self, request, *args, **kwargs):
# 数据给序列化类
user_ser = UserModelSerializer(data=user_list, many=True)
user_ser = UserModelSerializer(data=user_dic, many=False)
# 校验数据
user_ser.is_valid(raise_exception=True)
# 数据库操作
user_query|user_obj = user_ser.save() def patch(self, request, *args, **kwargs):
# 根据主键或主键们确定要修改的 对象 或 对象们 # 数据给序列化类
user_ser = UserModelSerializer(data=user_list, many=True, instance=对象们, partial=True|False)
user_ser = UserModelSerializer(data=user_dic, many=False, instance=对象, partial=True|False)
# 校验数据
user_ser.is_valid(raise_exception=True)
# 数据库操作
user_query|user_obj = user_ser.save()

三大认证

"""
1、认证组件:
i)自定义认证类继承BaseAuthentication,重写authenticate方法
ii)规则:游客返回None,非法用户抛异常,合法用户返回(user, auth)
iii)全局局部配置 2、权限组件:
i)自定义权限类继承BasePermission,重写has_permission方法
ii)规则:有权限返回True,无权限返回False - 校验对象:request.user或请求方式
iii)全局局部配置 3、评论组件:
i)自定义频率类继承SimpleRateThrottle,重写get_cache_key方法,设置scope类属性
ii)全局配置scope对应的访问频率:次数/时间
iii)get_cache_key返回的是与限制条件有关的动态字符串 - 限制条件来源于请求参数或请求头
iv)全局局部配置 4、jwt认证:
i)客户端存token,服务器存签发算法、校验算法、秘钥
ii)基本信息(头base64).用户信息过期时间(载荷base64).全信息+秘钥(签名HS256)
iii)drf-jwt组件使用
iv)登录接口签发token
v)认证组件校验token
"""

群查过滤组件

"""
1、搜索组件:search_fields = ['name', 'price'] 2、排序组件:ordering_fields = ['pk', 'price'] 3、分页组件:pagination_class = pagenations.MyPageNumberPagination 4、django-filter过滤插件:filter_class = CarFilterSet 5、自定义过滤器:自定义过滤类实现filter_queryset即可,根据筛选条件筛选后再返回queryset即可 使用:
i)视图类添加过滤类:filter_backends = [SearchFilter, OrderingFilter, LimitFilter, DjangoFilterBackend]
ii)为不同的过滤类配置过滤条件
"""

drf框架知识点总复习的更多相关文章

  1. drf框架总结复习(1)

    Serializers 序列化组件 为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成j ...

  2. drf框架,restful接口规范,源码分析

    复习 """ 1.vue如果控制html 在html中设置挂载点.导入vue.js环境.创建Vue对象与挂载点绑定 2.vue是渐进式js框架 3.vue指令 {{ }} ...

  3. 程序员必懂:javaweb三大框架知识点总结

    原文链接:http://www.cnblogs.com/SXTkaifa/p/5968631.html javaweb三大框架知识点总结 一.Struts2的总结 1.Struts 2的工作流程,从请 ...

  4. drf框架接口文档

    drf框架接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 pip insta ...

  5. drf框架serializers中ModelSerializer类简化序列化和反序列化操作

    0905自我总结 drf框架serializers中ModelSerializer类 基于seriallizer类进行简化 https://www.cnblogs.com/pythonywy/p/11 ...

  6. DRF框架和Vue框架阅读目录

    Vue框架目录 (一)Vue框架(一)——Vue导读.Vue实例(挂载点el.数据data.过滤器filters).Vue指令(文本指令v-text.事件指令v-on.属性指令v-bind.表单指令v ...

  7. DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render

    DRF框架    全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...

  8. DRF框架(二)——解析模块(parsers)、异常模块(exception_handler)、响应模块(Response)、三大序列化组件介绍、Serializer组件(序列化与反序列化使用)

    解析模块 为什么要配置解析模块 1)drf给我们提供了多种解析数据包方式的解析类 form-data/urlencoded/json 2)我们可以通过配置来控制前台提交的哪些格式的数据后台在解析,哪些 ...

  9. 第三章、drf框架 - 序列化组件 | Serializer

    目录 第三章.drf框架 - 序列化组件 | Serializer 序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer( ...

随机推荐

  1. vue学习(十)mixin 偷懒

    一 mixin混入偷懒技术 架子 <div id="app"> {{msg}} </div> <script> let app = new Vu ...

  2. (六--一)scrapy框架简介和基础应用

    一 什么是scrapy框架 官方解释 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 ( ...

  3. python EasyUI + Django--整合 CSRF 防护去除

    先来张完整图: 关于Django 得CSRF  中间件      防护   GET 是不做CSRF验证得   但POST 默认验证  $.cookie('csrftoken'))    "v ...

  4. java反射的认知和学习

    1.学习了Class对象,Filed对象(对应数据),Method对像(对应函数),Constructor对象(对应构造函数). 2.Declared可用于获取私有的数据和方法,但是打印得使用setA ...

  5. POJ - 1753 Flip Game (IDA*)

    题意:4*4的棋盘摆满棋子,有黑有白,翻转一个棋子的同时也将翻转其上下左右的棋子(翻转后黑变白,白变黑),问使棋盘上所有棋子颜色相同,最少翻转的棋子数. 分析: 1.每个棋子至多翻转1次.翻转偶数次与 ...

  6. 使用IDEA打对应结构的Jar包

    发布环境的内容和自己项目默认打包的样式不一样,就需要自定义打印jar包内容. 1.打开右上角项目结构 2.进行图片相关设置 3.直接进行打包,包会出现在class文件里面.解压软件解压开就是自己想要的 ...

  7. AttributeError: 'list' object has no attribute 'data'智障错误

    import urllib.requestimport urllib.parse url = ['http://fanyi.youdao.com/translate?smartresult=dict& ...

  8. ArrayList源码阅读笔记

    ArrayList ArrayList继承自AbstractList抽象类,实现了RandomAccess, Cloneable, java.io.Serializable接口,其中RandomAcc ...

  9. python3+Opencv 搭建环境和基本操作

    一.必备前提: Python3.5及以上版本.pip.windows环境 二.搭建opencv 该部分可以创建隔绝的Python环境来引入,参照virtualenv的使用 在目标的cmd窗口,依次输入 ...

  10. chown virtualbox

    virtualbox安装 root@cbill-VirtualBox:/# chown --help用法:chown [选项]... [所有者][:[组]] 文件... 或:chown [选项]... ...