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

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

django-haystack 默认返回搜索结果是一个类似于 django QuerySet 对象,需要配合模板系统使用,因为未被序列化,所以无法直接用于 django-rest-framework...但是,通过之前功能我们看到,使用 django-rest-framework 是一个近乎标准化但又枯燥无聊过程:首先是编写序列化器用于序列化资源,然后是编写视图集,提供资源各类操作接口。...通过调用序列化字段 to_representation 方法输入值进行序列化,这个方法接收第一个参数就是需要序列化值。...对象,这个对象就是视图中 HTTP 请求对象,但是因为 django 中 request 对象无法像 flask 那样从全局获取,因此 drf 在视图中将其保存在了序列化器和序列化字段 context...summary 是我们新增字段,注意我们序列化象是文章 Post,但这个对象是没有 summary 这个属性,但是 summary 其实是属性 body 序列化结果,因此我们通过指定序列化化字段

1.6K20

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

继承自这个类视图,只需其类属性做一些简单配置,就能获得获取单个资源、获取资源列表、资源列表分页等功能。当然,这个类作为其他特定功能类视图基类,我们一般也很少使用。...回顾一下此前讲 RESTful 架构基本概念,客户端使用 URL 访问资源,通过 HTTP 请求动词表达资源操作。...django-rest-framework 针对各种类型资源操作,提供了对应通用类视图,这些通用类视图主要包括: CreateAPIView 用于创建资源 POST 请求。...我们基本没有写任何逻辑代码,只是指定了类视图几个属性值。因为逻辑基本都是通用,通用类视图在背后帮我们做了全部工作,我们只要告诉它:用哪个序列化器去做,序列化哪个资源等就可以了。...以这里类视图为例,我们指定了: 使用 PostListSerializer 序列化器(通过 serializer_class 指定); 序列化博客文章(Post)列表(通过 queryset 指定);

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

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

事实上,我们在上一部教程 HelloDjango - Django博客教程(第二版) 页面侧边栏:使用自定义模板标签 已经讲解了如何获取归档日期列表,只是当时返回归档日期列表直接用于模板渲染,而这里我们需要将归档日期列表序列化通过...具体来说,获取博客文章发表时间归档列表方法是调用查询集(QuerySet) dates 方法,提取记录中日期。...之前序列化字段都是在序列化器(Serializer)里面使用因为通常来说接口需要序列化一个对象多个字段。...而这个接口中只需要序列化一个时间字段(类型为 Python 标准库中 datetime.date),所以没必要单独定义一个序列化器了,直接拿 django-rest-framework 提供用于序列化时间类型...我们通过列表推导式生成一个序列化归档日期列表,这个列表是可被序列化

2.6K30

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

视图函数里我们先从数据库获取文章列表资源,然后使用序列化其进行序列化序列化数据存在 data 属性里,我们把它传递给 HTTP 响应类 Response,并将这个响应返回。...实际上,这个类是 django-rest-framework django 模板响应类(SimpleTemplateResponse)拓展(具体细节可以不用了解,只要知道 django 使用它来渲染模板并构造...在 RESTful 架构中,客户端通过 HTTP 请求动词表征资源操作意图,而服务端则使用 HTTP 状态码表示资源操作结果。常用状态码及其含义如下: 200:通常表示请求成功。...回顾我们在上一步教程 交流桥梁:评论功能 中评论表单定义,我们通过继承 ModelForm 定义了表单,而并没有显示地指定表单字段类型。...read_only=True) title = CharField(label='标题', max_length=70) created_time = DateTimeField(label='创建时间

98920

第 10 篇:评论接口

首先是设计评论 API URL,根据 RESTful API 设计规范,评论资源 URL 设计为:/comments/ 评论资源操作有获取某篇文章下评论列表和创建评论两种操作,因此相应...然后需要一个序列化器,用于评论资源序列化获取评论时),反序列化创建评论时)。有了编写文章序列化基础,评论序列化器就是依葫芦画瓢事。...read_only_fields 用于指定只读字段列表,由于 created_time 是自动生成,用于记录评论发布时间,因此声明为只读,不允许通过接口进行修改。...extra_kwargs 指定传入每个序列化字段额外参数,这里给 post 序列化字段传入了 write_only 关键字参数,这样就将 post 声明为只写字段,这样 post 字段值仅在创建评论时需要...提供通用辅助方法,源码也并不复杂,如果不用这些方法,我们自己也可以轻松实现,但既然 django-rest-framework 已经为我们写好了,直接复用就行,具体实现请大家通过阅读源码进行学习。

65630

Django-rest-framework 是个什么鬼?

编写视图函数逻辑,根据 HTTP 请求类型,请求资源进行相应操作,这个过程通常涉及数据库操作。...使用约定资源描述格式(例如 XML 或者 JSON)序列化资源并将数据返回给客户端(通过 HTTP 响应)。 对比发现,前两步几乎是完全相同。...客户端资源操作通常是受限,有些资源只能由经过身份认证或具有相应权限用户才能操作,django-rest-framework 提供了丰富认证类和鉴权类,帮助我们用户身份和权限进行校验。...序列化(Serialization)。...django 内置序列化器功能有限,django-rest-framework 提供了功能更加丰富和强大序列化器,让资源序列化工作变得异常简单。 各种通用视图(Generic Views)。

98330

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

因此,django-rest-framework 引入了视图集(Viewsets),把同一个资源不同操作,集中到一个类中。...要注意一点是,视图集基类提供是除资源操作以外通用逻辑(例如 HTTP 请求预处理、HTTP 响应后处理、认证、鉴权等),而对于资源操作(如序列化、更新、删除资源等)则放在相应 Mixin 混入类里...django-rest-framework 提供了资源操作 5 个混入类,分别对应资源创建、查询、更新、删除。...CreateModelMixin 提供 create 方法用于创建资源 ListModelMixin 和 RetrieveModelMixin 提供 list 和 retrieve,分别用于获取资源列表和单个资源...basename 可以不指定,django-rest-framework 会自动从视图集 get_queryset 方法返回结果所关联 model 获取一个默认值,其值为 model 名小写。

80510

第 8 篇:内容支持 Markdown 语法,接口返回包含解析后 HTML

之前说过,模型字段不同类型值都需要不同序列化字段其进行序列化,我们之所以能直接在 Meta.fields 中指定需要序列化字段而不需要额外代码是因为这些字段都是直接定义在 django 模型中...django-rest-framework 可以根据模型中字段定义自动推断该使用何种类型序列化字段,但对于这里提到 toc、body_html 属性,django-rest-framework...就无法推断其值类型,也就无法自动使用对应序列化字段其进行序列化了。...不过解决方法很简单,既然 django-rest-framework 无法自动推断,那我们就人工指定该使用何种类型序列化字段就行了。...这里需要序列化字段值都是字符串,因此在序列化器中显示地指定需要序列化字段以及使用系列化字段类型就可以了: class PostRetrieveSerializer(serializers.ModelSerializer

82510

第 15 篇:接口单元测试

PostViewSet 视图集接口则包含了文章列表、文章详情、评论列表、归档日期列表等。对于文章列表接口,还可以通过查询参数请求文章列表资源进行过滤,获取全部文章一个子集。...APITestCase,因此可以直接通过 self.client 来发送请求,其中 self.client 是 django-rest-framework 提供 APIClient 一个实例,专门用来发送...,序列化字段通过调用 to_representation 方法,将传入值进行序列化。...正常视图函数调用时,视图函数会接收到传入 request 参数,然后 django-rest-framework 会将 request 传给序列化器(Serializer) _context 属性...,序列化器中任何序列化字段均可以通过直接访问 context 属性而间接访问到 _context 属性,从而拿到 request 对象。

1.2K20

第 7 篇:文章详情 API 接口

lookup_field 属性指定资源筛选字段(默认为 pk)。django-rest-framework 以该字段值从 get_queryset 返回资源列表中筛选出单个资源对象。...原因是视图集中指定文章序列化器为 PostListSerializer,这个序列化器被用于序列化文章列表。因为展示文章列表数据时,有些字段用不上,所以出于性能考虑,只序列化了部分字段。...同时注意,为了序列化文章标签 tags,我们新增了一个 TagSerializer,由于文章可能有多个标签,因为 tags 是一个列表,要序列化一个列表资源,需要将序列化器参数 many 值指定为...destory 因此,我们在视图集中重写 get_serializer_class 方法,写入我们自己逻辑,就可以根据不同请求,分别获取相应序列化器了: class PostViewSet(...更好做好是,给视图集加一个属性,用于配置 action 和 serializer_class 对应关系,通过查表法查找 action 应该使用序列化器。

1K30

python测试开发django-rest-framework-84.序列化(ModelSerializer)

前言 使用 django-rest-framework 序列化时候,返回日期时间格式带T,查看不方便,如update_time=2021-01-18T08:56:47.756971。...需格式化改成我们平常用日期时间格式 update_time=2021-01-18 08:56:47 问题描述 返回json数据,日期时间格式带T update_time: 2021-01-18T08...:56:47.756971 期望格式化成自己想要日期时间格式 update_time: 2021-01-18 08:56:47 ModelSerializer 序列化 我这里用是 ModelSerializer...序列化, 在序列化时候设置日期时间格式化格式 from rest_framework import serializers # 作者-上海悠悠 QQ交流群:717225969 # blog地址 https...://www.cnblogs.com/yoyoketang/ class GoodsAPISerializer(serializers.ModelSerializer): # 设置创建时间和更新时间格式化

43830

第 6 篇:分页接口

作者:HelloGitHub-追梦人物[1] 文中所涉及示例代码,已同步更新到 HelloGitHub-Team 仓库[2] 如果没有设置分页,django-rest-framework 会将所有资源类表序列化后返回...django-rest-framework 为分页功能提供了多个辅助类,常用有: PageNumberPagination 将资源分为第 1 页、第 2 页...第 n 页,使用页码号请求分页结果。...LimitOffsetPagination 通过 limit 和 offset 两个参数来控制请求资源。例如通过发送 API 请求:/posts/?...offset=20&limit=5,将获取文章资源列表第 20 篇后 5 篇文章。如果 offset 以等差数列递增,limit 保持不变,则等价于按页码分页。...请求文章 api,返回结果如下: 返回结果解释: count:总资源数目 next:下一页资源链接 previous:上一页资源链接 results:当前页资源列表 参考资料 [1]HelloGitHub

62320

python测试开发django-rest-framework-85.序列化(ModelSerializer)

前言 在使用 django-rest-framework 开发接口时候,我们希望能设置有些字段是必填字段,有些字段是非必填字段。...在使用ModelSerializer 序列化时候,可以个字段加一个 required 参数 设置 True 或 False 。...ModelSerializer 序列化 接着前面一篇,设置日期时间格式后,发现这2个字典是必填项了 from rest_framework import serializers class GoodsAPISerializer...(serializers.ModelSerializer): # 设置创建时间和更新时间格式化 create_time = serializers.DateTimeField(format...接下来再提交数据时候,就不用传 create_time 和 update_time 参数了 设置必填项 required=True 我们也可以设置其他字段是必填项,在ModelSerializer序列化时候

60030

django-rest-framework框架学习

在django中很著名一个框架是django-rest-framework,帮我们减少了很多工作量,尤其在序列化与反序列化成我们需要格式帮了我们省了很多事 在这里就记录一下个人学习过程 django-rest-framework...实现一组api基本流程 在models.py中创建自己需要数据模型 创建serializers.py在其中写出适合serializer类,能够正确序列化与反序列化 在views.py中写出合适...://www.django-rest-framework.org/api-guide/serializers/ 创建serializers.py在其中实现序列化类 由于这个序列化是和我们模型想对应相关...请注意,使用超链接API时,您需要确保双方API意见和串行类设置查找字段,如果你需要使用一个自定义值 在get_queryset()中实现是按照name查询因为很多时候客户端并不知道自己id...是多少, serializer.data是模型序列化字典,如果想拼成需要格式,需要提前构造合适字典,在用Response()方法帮我们序列化成json类型 在urls中自定义资源url 在urls.py

1.2K10

JS与ES6高级编程学习笔记(三)——JavaScript面向对象编程

User类型,这是因为jack这个对象是通过字面量直接创建,call只是调用构造函数初始化了这个对象。...,虽然通过__proto__也能获取对象原型,但这并不是一个标准属性。...解析时要注意日期格式问题,从服务端返回日期可能是一个unix时间,可以在还原函数中转换。 八、上机部分 8.1、上机任务一(30分钟内完成) 上机目的 1、掌握创建对象方法。...weekday方法获得日期对象星期,unixTimestamp将日期转换成Unix时间,toDate方法将Unix时间(Unix timestamp)转换成日期。...(选作) 提示:Unix时间(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01

71630

Redis数据结构和应用场景

这种多了序列化和使用时反序列化过程和成本开销。如果只需要修改其中一个值,比如电话,整个对象都需要拿出来做修改,造成不必要开销。...链表有自己长度信息,获取长度时间复杂度为O(1)。 列表一般用于实现一个队列,通过lpush和brpop可以实现操作。...因为ZSet是有序,所以在排序场景业务上比较常见,比如首页推荐top10热搜,阅读量由高到低帖子,歌手排行榜之类。...并且针对于Set,redis提供了集合求交集,并集,差集等操作,就可以很好不同集合进行处理了。 比如做一个投票排行榜,要去每次投票增1,需要更新最后投票实现,实现排序。...比如score是数字类型,同分情况下按照先来顺序排序,可以对score部分进行改造,score分成两部分,一部分分值,一部分时间时间越来越大,考虑到时间可能越来越大,可以采用一个时间方式,

89810

【经验分享】Django开发中常用到数据库操作总结

:result = Test.objects.filter(id=1, name=’test’)如果多条件与查询,直接用逗号隔开,filter函数里面的参数都是Test Model中字段3)获取单个对象...name__startswith=’p’)2、第二步,Q对象以查询参数方式使用,多个Q对象是and关系:Test.objects.filter(Q(date=’2018-10-10 00:00:00’)...(id=1).update(name=‘Google’)---删除类操作1)先查询获取要删除对象,然后直接delete操作// 删除id=1数据test1 = Test.objects.get(id...json数据对于很多web开发接口时候,要返回是json数据,而django从DB查询出来是对象集,可以考虑django-rest-frameworkserializers类,具体可参考:Tutorial...1: 序列化---查询条件总结字段名__op:__exact 精确等于 like ‘aaa’__iexact精确等于忽略大小写ilike‘aaa’__contains 包含 like ‘%aaa%’_

64220

django-rest_framework api框架学习day1

今天开始了django-rest-framework学习 *** 其实api写起来的话要比前后端一起写要简单很多,因为你不需要关心前端怎么写,主要心思放在后端上面即可,前端的话随便找个模板,然后用...,还是遵从规则好点,因为各种类型请求都是经过他处理然后才返回数据 def dispatch(self, request, *args, **kwargs): return HttpResponse...(‘我是被执行’) @csrf_exempt def get(self,request,*args,**kwargs): set={ ‘code’:100, ‘meg’:’获取成功’ }...,直接上代码吧 *** def get(self,request,*args,**kwargs): # 通过kwargs拿到api接口传递进来数据 pk=kwargs.get(‘pk’) print...csrf验证,这样的话View如果没有通过csrf验证就会抛出错误 *** 传送数据到外部称之为序列化,外部传送数据进来称反序列化

1.3K40

你有认真了解过自己“Java 对象”吗

(); clone() 深拷贝,需要实现 Cloneable 接口并实现 clone(),不调用任何构造器 Person p3 = (Person) p.clone(); 反序列化 通过序列化和反序列化技术从文件或者网络中获取对象二进制流...每当我们序列化和反序列化对象时,JVM 会为我们创建了一个独立对象。在 deserialization 中,JVM 不使用任何构造函数来创建对象。...对象头 HotSpot 虚拟机对象头包含两部分信息。 第一部分用于存储对象自身运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间等。...对象另一部分类型指针,即对象指向它类元数据指针,虚拟机通过这个指针来确定这个对象是哪个类实例(并不是所有的虚拟机实现都必须在对象数据上保留类型指针,也就是说,查找对象元数据信息并不一定要经过对象本身...我们创建对象目的,肯定是为了使用它,那 JVM 是如何通过栈帧中对象引用访问到其内存对象实例呢?

1.1K10

DjangoFlaskTornado三大web框架性能分析

远程性能:从远程服务器上返回 http response 时间 数据库性能:使用 ORM(对象关系映射)从数据库获取数据,并渲染到模板上时间 最基本 json 测试:Django 与 Flask...占优 单纯在本地测试 json 序列化,Django 完成一次 json 序列化平均时间 42.52 毫秒,每秒请求量 4762 次。...Tornado 完成 json 序列化平均时间高达 77.51 毫秒,是所有框架中耗时最长,每秒请求数是 2578 次,也是低于 Django 与 Flask 水准。...然而 Django 大部分功能是建立在其 Django ORM 基础上,比如 models, admin, forms 甚至第三方框架 django-rest-framework。...而对于 Django 同步特性导致吞吐量小问题,其实可以通过 Celery 等解决,倒不是一个根本问题。Django 项目代表:Instagram,Guardian。

3.2K30
领券