首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第 5 篇:用视图集,简化你的代码

因此,django-rest-framework 引入了视图集(Viewsets),把对同一个资源的不同操作,集中到一个类。...使用视图集的一个更大的好处,就是可以配合 django-rest-framework 提供的路由器(router),自动生成 API 的 URL,不需要我们再手工 URL 模式和视图函数绑定了。...例如这里 basename='post',列出资源列表的 action 为 list(见上一篇教程关于 action 的讲解),所以生成的获取文章资源列表的视图函数名为 post-list,使用 reverse...目前只有一条 /api/posts/,点击超链接进去,可以看到 /api/posts/ 的返回结果,即全部文章列表。 但是,目前我们的 api 一股脑全部文章列表的返回了。...但是我们的博客文章列表是有分页功能的,接下来我们就使用 django-rest-framework 提供的分页辅助类,一行代码就可以完成分页功能。

80310

第 4 篇:用类视图实现首页 API

django-rest-framework 中最基本的类视图是 views.APIView,这个类可以看成是上一篇教程中用到的 api_view 装饰器的类版本。...这个类比较基础,其核心功能就是 HTTP 请求预处理、分发请求给对应的处理函数,以及 HTTP 响应后处理,还有就是 as_view 方法类转为函数(要注意与被请求的 URL 绑定的视图必须是一个可调用对象...继承自这个类的视图,只需对其类属性做一些简单的配置,就能获得获取单个资源、获取资源列表、资源列表分页等功能。当然,这个类作为其他特定功能类视图的基类,我们一般也很少使用。...对资源列表分页(通过 pagination_class 指定,PageNumberPagination 会自动对资源进行分页,后面的教程会详细介绍分页功能); 允许任何人访问该资源(通过 permission_classes...最后一步就是在 urls.py 绑定接口,把原来绑定的函数视图改为现在的类视图: path('api/index/', views.IndexPostListAPIView.as_view()) 启动开发服务器

75510
您找到你想要的搜索结果了吗?
是的
没有找到

第 6 篇:分页接口

django-rest-framework分页功能提供了多个辅助类,常用的有: PageNumberPagination 资源分为第 1 页、第 2 页...第 n 页,使用页码号请求分页结果。...offset=20&limit=5,获取文章资源列表第 20 篇后的 5 篇文章。如果 offset 以等差数列递增,limit 保持不变,则等价于按页码分页。...要使用分页功能非常简单,只需在项目的配置文件配置好分页选项,即可全局启用分页功能。...配置文件分页设置将作用于全局,如果某个视图函数或者视图集不想使用全局配置怎么办呢?可以在视图函数或者视图集中设置 pagination_class 属性,指定需要使用的分页辅助类即可。...例如博客文章列表分页替换为 limit offset 的分页方式,可以这样设置: from rest_framewrok.pagination import PageNumberPagination

61720

Django-rest-framework 是个什么鬼?

在视图中渲染 HTML 模板,返回 HTTP 响应。 其实,基于 django-rest-framework 的 RESTful API 的开发,过程是完全类似的: 绑定 URL 和视图函数。...有的同学就要问了,虽然 django 的视图函数通常情况下返回 HTML 文档的响应,但是 django 也支持返回 XML 格式或者 JSON 格式的响应,那么为什么还要使用 django-rest-framework...django 基于 Python 语言开发,因此资源通常由 Python 对象描述,那么在传递给客户端时,就要进行转换,例如 Python 对象转换为 JSON 字符串,这个过程就叫做序列化。...除此以外,django-rest-framework 还提供了分页(Pagination)、API 版本控制(Versioning)、缓存(Caching)、限流(Throtting)等各种功能类。...在接下来的实战教程,我们会逐一的学习并使用它们。 让我们正式开启 django-rest-framework 的学习之旅吧!

98230

第 3 篇:实现博客首页文章列表 API

在基于模板引擎的开发方式,博客首页文章列表的视图函数可能是这样的: from django.shortcuts import render from .models import Post def...视图函数里我们先从数据库获取文章列表资源,然后使用序列化器对其进行序列化,序列化后的数据存在 data 属性里,我们把它传递给 HTTP 响应类 Response,并将这个响应返回。...HTTP 响应即可),通常在 RESTful API 的视图函数我们都会返回这个类,而不是 django 的 HTTP 响应类。...在转换过程,还会进行数据合法性的校验。 先来看一个简单的例子(摘自 django-rest-framework 官网示例),理解序列化器的工作原理和功能。...接下来,让我们使用 django-rest-framework 提供的通用类视图,首页 API 的视图函数改为类视图。

98920

Python黑科技 | 一步一步教你如何搭建自己的视频聚合站

因为直播平台数据实时在变,所以考虑存储的数据放在缓存(redis),因为部署在了lean cloud上,所以示例就直接存储在了lean cloud的存储上。...Django还提供了django-rest-framework,方便开发RESTful的接口,这个项目后续做了个配搭的React Native的mobile应用,所以引入了django-rest-framework...用了lean cloud的引擎) 参考了lean cloud官方的项目骨架: https://github.com/leancloud/… 前端展示(pureCSS) pureCss还是为了简单,支持响应式...提供,可以通过分页的方式展现当前库的信息 /chairman/{id}(redis版本才支持) Django-rest-framework提供,可以根据指定id获取某一个主播的信息 刷新机制 lean...因为考虑到在手机上的显示,所以做了自适应 列表列表页的渲染使用了Django的模板引擎 由于lean cloud的存储和Django的orm不一样,所以这里需要将attributes放到列表,页面上才能用模板语法进行访问

1.8K70

第 12 篇:加缓存为接口提速

我们先来看看 API 接口缓存的逻辑,伪代码是这样的: 给定一个 URL, 尝试从缓存查找这个 URL 接口的响应结果 if 结果在缓存: return 缓存的结果 else: 生成响应结果...响应结果存入缓存 (以便下一次查询) return 生成的响应结果 缓存结果是以 key-value 的键值对形式存储的,这里关键的地方在于存储或者查询缓存结果时,需要生成相应的 key...再次请求文章列表接口,PostListKeyConstructor 生成同样的缓存 key,这时就可以直接从缓存读到结果并返回了。...再次请求文章列表接口,PostListKeyConstructor 生成不同的缓存 key,这个新的 key 不在缓存,因此将从数据库查询最新结果,并把查询的结果写入缓存。...再次请求文章列表接口,PostListKeyConstructor 生成同样的缓存 key,这时就可以直接从缓存读到结果并返回了。

1.1K40

第 9 篇:实现分类、标签、归档日期接口

例如点击某个分类,博客跳转到该分类下全部文章列表页面。这些数据的展示都需要开发对应的接口,以便前端调用获取数据。...HTTP 响应对象。...接着我们在接口返回一个 Response, Response 序列化后的结果包装返回(保存在 data 属性),django-rest-framework 会进一步帮我们把这个 Response 包含的数据解析为合适的格式...django-rest-framework 常用 HTTP 请求的状态码常数预定义 status 模块里,使用预定义的变量而不是直接使用数字的好处一是增强代码可读性,二是减少硬编码。...对于这样的场景,我们可以在请求 API 时加上查询参数,django-rest-framework 解析查询参数,然后从全部文章列表过滤出查询所指定的文章列表再返回。

2.6K30

python测试开发django-rest-framework-86.分页查询功能(PageNumberPagination)

前言 当查询出来的数据量非常大的时候,需要分页查询,django-rest-framework 提供了分页的支持。...分页django-rest-framework 分页器有三种: PageNumberPagination 简单分页(查看第n页,每页显示N条) LimitOffsetPagination...偏移分页(在第n个位置,向后查看n条数据) CursorPagination 加密分页,只能看上一页和下一页,速度快 简单分页(PageNumberPagination) 我们可以在配置文件设置全局的分页方式...请求设置页面大小的参数名称,默认是None max_page_size 最大允许请求的页面大小,仅在page_size_query_param被设置时有效 last_page_string 字符串列表或元组...,默认是 (‘last’,) template 分页空间使用的模板名称,可以覆盖或设置为None,默认’rest_framework/pagination/numbers.html’ APIView使用分页查询

1.1K30

初始化 RESTful API 风格的博客系统

接下来,我们将使用 django-rest-framework,一步步为博客系统开发 RESTful API,并在这个过程深入学习 django-rest-framework 的使用方法,为后续使用...如果你已经跟着第一步的教程 Django博客教程(第二版)完成了博客系统的开发,那么可以继续在原来的项目上进行,只需要注意和这个教程个别细微的差异就可以了。... django-rest-framework 添加到 INSTALLED_APPS 里: blogproject/settings/common.py INSTALLED_APPS = [...'rest_framework', ] django-rest-framework 还为我们提供了一个与 API 进行交互的后台,有时候 API 可能需要登录认证,因此 django-rest-framework...这个页面会列出所有可用的 API,因为现在没有开发任何 API,所以列表为空。 点击右上角的 Log in 可进行认证登录,登录后就能和需要认证登录才能访问的 API 进行交互。

66720

第 16 篇:别再手动管理接口文档了

drf-yasg drf-yasg[5] 是一个 django 的第三方应用,它可以从 django-rest-framework 框架编写的代码自动提取接口信息来生成符合 OpenAPI 标准的文档...drf-yasg 添加到 INSTALLED_APPS 配置项: # filename="blogproject/settings/common.py" INSTALLED_APPS = [...GET /posts/{id}/comments/ 这个接口应该还支持分页查询的参数,但生成的文档没有列出,接口响应参数也是错误的,正确的应该是一个分页后的评论列表,但文档是单个评论对象。...前者文档显示了一些错误的参数,后者本应该有分页参数,但是文档却没有列出。...二是 GET /posts/archive/dates/,这个接口的返回内容应该是一个日期列表,但是文档显示的竟然是博客文章列表。drf-yasg 推断的响应类型是正确的,但内容不对。

1.8K20

带你认识 flask 分页

最后的部分是表单处理逻辑添加到视图函数: from app.forms import PostFormfrom app.models import Post @app.route('/', methods...通过重定向来响应Web表单提交产生的POST请求是一种标准做法。这有助于缓解在Web浏览器执行刷新命令的烦恼。当你点击刷新键时,所有的网页浏览器都会重新发出最后的请求。...如果带有表单提交的POST请求返回一个常规的响应,那么刷新重新提交表单。因为这不是预期的行为,所以浏览器会要求用户确认重复的提交,但是大多数用户却很难理解浏览器询问的内容。...在最终的应用,每页显示的数据将会大于三,但是对于测试而言,使用小数字很方便。 接下来,我需要决定如何页码并入到应用URL。...如果这两个链接的任何一个都是None,则通过条件过滤将其从页面中省略。 04 个人主页分页 主页分页已经完成,但是,个人主页也有一个用户动态列表,其中只显示个人主页拥有者的动态。

2K20

Elasticsearch针对文档Search与CRUD操作的执行流程

P1分片和RO分片分别将相匹配的文档_id列表返回给协调节点,然后协调节点将这些相匹配文档的_id整合到自己的优先级队列,此时其优先进队列的文档_id已经是一个全局排序后的结果了。...P1分片和RO分片这些相匹配文档的详情传递给协调节点。 协调节点将最终数据返回给客户端。...所以,from搭配size的分页方式并不适合深度分页场景。 2 CRUD 2.1 新增文档(INDEX) 客户端发送请求。...主本分片接收到请求后,文档添加到in-memory buffer和transaction log中去。...,所以flush操作的关键一环就是采用fsync函数filesystem cachenew segment持久化到磁盘;一旦磁盘持久化成功完成,那么transaction log也就没有必要存在了

35810

day69_淘淘商城项目_02

2、在mysql创建一个taotao数据库。 3、创建数据库的脚本taotao.sql导入到taotao。...并且pojo放到toatao-manager-pojo工程mapper接口及映射文件放到taotao-manager-dao工程。...3、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心基于`长连接`推送变更数据给消费者。...5、后台商品列表查询功能 5.1、整合静态页面 静态页面位置:如图: ? 使用方法:把静态页面添加到taotao-manager-web工程的WEB-INF下,如下图所示: ?...5.3.2、响应的json数据格式EasyUIDataGridResult 创建商品列表查询时的返回的数据类EasyUIDataGridResult(包装类),将该类放入taotao-common,因为服务层和表现层都要用它

1.2K20

ECSHOP学习笔记

myship.php 支付配送DEMO ┣ pick_out.php 选购中心 ┣ receive.php 处理收回确认的页面 ┣ region.php 地区切换程序 ┣ respond.php 支付响应页面...~在以后的PHP页面 都会给IN_ECS常量进行判断!~如果为 FALSE 就不执行下面的任何语句。 此方法是为了防止盗链和黑客行为。如果你想建立一个新的网页,可以在模板文件。...~再模板文件夹 library 文件创建 lib文件.在DWT 直接调用lib 文件!~并需要修改一些原来ECSHOP已有的文件 PHP 语句!...ecshop为什么要定义'IN_ECS' ecshop里的有些.php页是不需要用户通过url直接访问的,用来被其它页调用的,例如/includes/init.php,就不需要直接访问,通过url...活动的结果 clear_tpl_files(is_cache =true, ext = '') P: 清除指定后缀的模板缓存或编译文件 clear_compiled_files(params) P: 创建分页列表

7K50

如何判断目标站点是否为Django开发

假如开发者 csrfmiddlewaretoken 这个名字换了,怎么办?...比如,Django输出的html通常会有很多空白行,因为这些位置放的是逻辑语句,Django不像jinja2会提供 {%- 这样清除空白行的方法: 再比如,Django默认找回密码的链接是 /password_reset...再比如,django文件上传的目录通常叫 media ,注册时密码要求8位以上数字加字母,分页通常是 ?...常用的第三方模块有django-rest-framework、django-debug-toolbar、django-bootstrap3、django-filter、django-cron、django-allauth...比如,django-rest-framework默认包含一个登陆页面, /api-auth/login/ : 再比如,django-simple-captcha生成的验证码会包含一个名字是 captcha

1.4K80

第 11 篇:基于 drf-haystack 的文章搜索接口

当然解决方案也很简单,编写相应的序列化器返回结果序列化就可以了。...Elasticsearch 服务的 URL 配置出错导致,解决方法是进入 settings/local.py 配置文件搜索设置改为下面的内容: HAYSTACK_CONNECTIONS['default...另外内部类 Meta 同样继承 PostListSerializer.Meta,这样就无需重复定义序列化字段列表 fields。...text=key-word key-word 替换为需要搜索的关键字,例如将其替换为 markdown,测试集数据得到的搜索结果如下: 搜索结果符合预期,但略微有一点不太好的地方,就是没有高亮的标题和摘要...在我们自定义的逻辑,首先调用父类 CharField 的 to_representation 方法,父类序列化的逻辑是任何输入的值都转为字符串;接着我们从 context 属性取得 request

1.6K20
领券