因此,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 提供的分页辅助类,一行代码就可以完成分页功能。
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()) 启动开发服务器
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
在视图中渲染 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 的学习之旅吧!
而在返回的资源中,post 字段就不会出现。...否则就执行序列化的 save 逻辑将评论数据存入数据库,最后返回响应。...# 获取文章下关联的全部评论 queryset = post.comment_set.all().order_by("-created_time") # 对评论列表进行分页...self.paginate_queryset(queryset) # 序列化评论 serializer = self.get_serializer(page, many=True) # 返回分页后的评论列表...另外还可以看到我们调用了一些辅助方法,例如 paginate_queryset 对查询集进行分页;get_paginated_response 返回分页后的 HTTP 响应,这些方法其实都是 GenericViewSet
在基于模板引擎的开发方式中,博客首页文章列表的视图函数可能是这样的: 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 的视图函数改为类视图。
因为直播平台数据实时在变,所以考虑将存储的数据放在缓存中(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放到列表中,页面上才能用模板语法进行访问
我们先来看看 API 接口缓存的逻辑,伪代码是这样的: 给定一个 URL, 尝试从缓存中查找这个 URL 接口的响应结果 if 结果在缓存中: return 缓存中的结果 else: 生成响应结果...将响应结果存入缓存 (以便下一次查询) return 生成的响应结果 缓存结果是以 key-value 的键值对形式存储的,这里关键的地方在于存储或者查询缓存结果时,需要生成相应的 key...再次请求文章列表接口,PostListKeyConstructor 将生成同样的缓存 key,这时就可以直接从缓存中读到结果并返回了。...再次请求文章列表接口,PostListKeyConstructor 将生成不同的缓存 key,这个新的 key 不在缓存中,因此将从数据库查询最新结果,并把查询的结果写入缓存。...再次请求文章列表接口,PostListKeyConstructor 将生成同样的缓存 key,这时就可以直接从缓存中读到结果并返回了。
例如点击某个分类,博客将跳转到该分类下全部文章列表页面。这些数据的展示都需要开发对应的接口,以便前端调用获取数据。...HTTP 响应对象。...接着我们在接口返回一个 Response, Response 将序列化后的结果包装返回(保存在 data 属性中),django-rest-framework 会进一步帮我们把这个 Response 中包含的数据解析为合适的格式...django-rest-framework 将常用 HTTP 请求的状态码常数预定义 status 模块里,使用预定义的变量而不是直接使用数字的好处一是增强代码可读性,二是减少硬编码。...对于这样的场景,我们可以在请求 API 时加上查询参数,django-rest-framework 解析查询参数,然后从全部文章列表中过滤出查询所指定的文章列表再返回。
前言 当查询出来的数据量非常大的时候,需要分页查询,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使用分页查询
接下来,我们将使用 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 进行交互。
zen cart各部分页面相对应模板文件列表: 文件路径 注释 index.php 主文件 includes/templates/[custom template folder]/common/html_header.php...页面的head部分 includes/templates/[custom template folder]/common/tpl_main_page.php 页面的body部分 includes/...templates/[custom template folder]/common/tpl_header.php 所有页面的页眉 (column left) includes/templates/[...将商品数据添加到数组 includes/templates/[custom template folder]/templates/tpl_modules_product_listing.php 显示商品数量和商品导航菜单...includes/templates/[custom template folder]/common/tpl_list_box_content.php 显示商品数组 商品信息页面 includes
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 推断的响应类型是正确的,但内容不对。
2.完成情况 :fa-check: 文章列表 :fa-check: 文章详情 :fa-check: 文章目录 :fa-check: 标签过滤 :fa-check: 文章编辑 :fa-check: 新建文章...,删除文章 :fa-check: 新建标签 :fa-check: 分页 :fa-check: 评论功能后端 :fa-check: 评论功能前端 :fa-times: 个人信息管理 :fa-check:...fa-times: 提示框美化 :fa-times: 其他部分跳转 :fa-times: 节流 :fa-times: 浏览量 :fa-times: 草稿(私密文章) :fa-times: 时区问题(保存到数据库中的时间是...前端 makedown 渲染和编辑使用 Editor.md 前端框架使用 DiQuick 前端 MVVM 实现使用 Vue 部分图标来自 iconfont 后端主要使用 Django 前后端分离依赖 Django-REST-framework
最后的部分是将表单处理逻辑添加到视图函数中: from app.forms import PostFormfrom app.models import Post @app.route('/', methods...通过重定向来响应Web表单提交产生的POST请求是一种标准做法。这有助于缓解在Web浏览器中执行刷新命令的烦恼。当你点击刷新键时,所有的网页浏览器都会重新发出最后的请求。...如果带有表单提交的POST请求返回一个常规的响应,那么刷新将重新提交表单。因为这不是预期的行为,所以浏览器会要求用户确认重复的提交,但是大多数用户却很难理解浏览器询问的内容。...在最终的应用中,每页显示的数据将会大于三,但是对于测试而言,使用小数字很方便。 接下来,我需要决定如何将页码并入到应用URL中。...如果这两个链接中的任何一个都是None,则通过条件过滤将其从页面中省略。 04 个人主页中的分页 主页分页已经完成,但是,个人主页中也有一个用户动态列表,其中只显示个人主页拥有者的动态。
P1分片和RO分片分别将相匹配的文档_id列表返回给协调节点,然后协调节点将这些相匹配文档的_id整合到自己的优先级队列中,此时其优先进队列中的文档_id已经是一个全局排序后的结果了。...P1分片和RO分片将这些相匹配文档的详情传递给协调节点。 协调节点将最终数据返回给客户端。...所以,from搭配size的分页方式并不适合深度分页场景。 2 CRUD 2.1 新增文档(INDEX) 客户端发送请求。...主本分片接收到请求后,将文档添加到in-memory buffer和transaction log中去。...,所以flush操作的关键一环就是采用fsync函数将filesystem cache中new segment持久化到磁盘中;一旦磁盘持久化成功完成,那么transaction log也就没有必要存在了
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中,因为服务层和表现层都要用它
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: 创建分页的列表
假如开发者将 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
当然解决方案也很简单,编写相应的序列化器将返回结果序列化就可以了。...Elasticsearch 服务的 URL 配置出错导致,解决方法是进入 settings/local.py 配置文件中,将搜索设置改为下面的内容: HAYSTACK_CONNECTIONS['default...另外内部类 Meta 同样继承 PostListSerializer.Meta,这样就无需重复定义序列化字段列表 fields。...text=key-word 将 key-word 替换为需要搜索的关键字,例如将其替换为 markdown,测试集数据中得到的搜索结果如下: 搜索结果符合预期,但略微有一点不太好的地方,就是没有高亮的标题和摘要...在我们自定义的逻辑中,首先调用父类 CharField 的 to_representation 方法,父类序列化的逻辑是将任何输入的值都转为字符串;接着我们从 context 属性中取得 request
领取专属 10元无门槛券
手把手带您无忧上云