django 五 知识点总结 二
谈谈你对 django rest framework框架的认识? - 路由, - 可以通过as_view传参数,根据请求方式不同执行相应的方法 - 可以在url中设置一个结尾,类似于: .json - 视图, - 帮助开发者提供了一些类,并在类中提供了多个方法以供我们使用。 - 版本, - 在url中设置version参数,用户请求时候传入参数。在request.version中获取版本,根据版本不同做不同处理,请求头的accept中也可以放版本号 - 认证, - 写一个类并注册到认证类,在类的的authticate方法中编写认证逻辑。 - 认证成功(user,auth) - raise AuthticateFaild(....) - None - 权限 - 写一个类并注册到权限类,在类的的has_permission方法中编写认证逻辑。 - True - False - 频率限制 - 写一个类并注册到频率类,在类的的 allow_request/wait 方法中编写认证逻辑。 访问频率控制原理: 匿名: 1.1.1.1:[时间,时间,时间,时间,] 登录: user:[时间,时间,时间,时间,] allow_request - True - False 如果返回False,那么就要执行wait - 解析器, - 根据ContentType请求头,选择不同解析器对 请求体中的数据进行解析。 POST /index/ http1.1.\r\nhost:11.11.11.11\r\nContent-Type:url-formendo.... \r\n\r\nuser=alex&age=123 POST /index/ http1.1.\r\nhost:11.11.11.11\r\nContent-Type:application/json\r\n\r\n{....} - 分页 - 对从数据库中获取到的数据进行分页处理: SQL -> limit offset - 根据页码:http://www.luffycity.com/api/v1/student/?page=1&size=10 - 根据索引:http://www.luffycity.com/api/v1/student/?offset=60&limit=10 - 根据加密:http://www.luffycity.com/api/v1/student/?page=erd8 赠送:页码越大速度越慢,为什么以及如何解决? 原因:页码越大向后需要扫描的行数越多,因为每次都是从0开始扫描。 解决: - 限制显示的页数 - 记录当前页数据ID最大值和最小值,再次分页时,根据ID现行筛选,然后再分页。 - 序列化 - 对queryset序列化以及对请求数据格式校验。 - 渲染器 - 根据URL中传入的后缀,决定在数据如何渲染到到页面上。