Django 读作姜戈,第一个 D 不发音,与电影《被解救的姜戈》的姜戈除了读音一样,没有其他半毛钱关系。Django 是一个优秀的 Web 框架,用 Python 编写,是非常流行的全栈框架。...这也是 select_related() QuerySet 方法存在的原因,对于常见的查询相关对象的情形,它是可选的性能提升器。...将 URL 绑定到 Python 函数名称是一件不好的事。遵循这些原则,Django URL 系统应该允许同一应用程序的 URL 在不同的上下文中有所不同。...六、视图方面: 1、简单 编写视图应该和编写 Python 函数一样简单。当函数可以使用时,开发人员不必实例化一个类。 2、使用请求对象 视图可以访问请求对象:一个存储有关当前请求的元数据的对象。...该对象应直接传递给视图函数,而不是视图函数必须从全局变量访问请求数据。通过传递一个构造的请求对象,视图可以可以非常轻巧,干净且易于测试。
上一回说到,姜戈的江湖初体验:如何架设服务器,如何回复http请求,如何创建App。这一回,我们要走入糖果庄园。 数据库是一所大庄园,藏着各种宝贝。一个没有数据库的网站,所能提供的功能会非常有限。...为了找到心爱的人,姜戈决定一探这神秘的糖果庄园。 连接数据库 Django为多种数据库后台提供了统一的调用API。根据需求不同,Django可以选择不同的数据库后台。MySQL算是最常用的数据库。...姜戈略一迟疑,旋即走入了庄园的大门。 创立模型 MySQL是关系型数据库。但在Django的帮助下,我们不用直接编写SQL语句。Django将关系型的表(table)转换成为一个类(class)。...这富丽堂皇的别墅中,姜戈隐隐闻到凶险的味道。 显示数据 数据模型虽然建立了,但还没有数据输入。为了简便,我们手动添加记录。打开MySQL命令行,并切换到相应数据库。...姜戈强自镇定,嘴角忍不住颤动。 总结 Django使用类和对象接口,来操纵底层的数据库。 有了数据库,就有了站点内容的大本营。 姜戈,风雨欲来。
测试与文档为了确保API的稳定性和正确性,我们需要编写测试来验证API的各种功能和行为。Django REST框架提供了内置的测试工具和类,可以帮助我们编写各种类型的测试。...例如,我们可以编写基于APITestCase的测试类来测试API的各种端点和功能。另外,为了方便使用和理解API,我们还可以使用Django REST框架提供的文档工具来自动生成API文档。...settings.pyREST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',}API测试通过编写...API测试,我们可以验证API的各种功能和行为,确保API的稳定性和正确性。...首先,我们学习了如何使用Django REST框架来创建简单的API端点,包括定义模型、序列化器、视图集以及路由配置等。
在 DRF 中,你可以使用内置的过滤器或者编写自定义的过滤器。...这些过滤器可以用于所有的 DRF 视图,包括基于函数的视图和基于类的视图。你只需要将过滤器添加到视图的 filter_backends 属性中就可以了。...编写自定义的过滤器除了使用内置的过滤器之外,你还可以编写自定义的过滤器来满足你的需求。编写自定义的过滤器可以让你更好地控制过滤逻辑,并且可以使用任何 Django QuerySet 方法来处理过滤器。...例如,下面的代码展示了如何编写一个自定义的过滤器,它将过滤掉所有价格低于 10 的书籍:from rest_framework import filtersclass PriceFilterBackend...另外,我们还展示了如何编写自定义的过滤器,以便你可以更好地控制过滤逻辑,并使用任何 Django QuerySet 方法来处理过滤器。
继续阅读,来弄清楚如何向列表添加你自己的操作。 编写操作 通过示例来解释操作最为简单,让我们开始吧。 操作的一个最为普遍的用例是模型的整体更新。...所以让我们编写一个操作,可以让我们将一篇文章的状态修改为“已发布”。 编写操作 函数 首先,我们需要定义一个函数,当后台操作被点击触发的时候调用。...操作函数,跟普通的函数一样,需要接收三个参数: 当前的 ModelAdmin 表示当前请求的HttpRequest 含有用户所选的对象集合的QuerySet 我们用于发布这些文章的函数并不需要ModelAdmin...操作的高级技巧 对于进一步的选择,你可以使用一些额外的选项。 ModelAdmin上的操作 ModelAdmin 上面的例子展示了定义为一个简单函数的make_published操作。...例如,你可能编写了一个简单的导出函数,它使用了Django的序列化函数来将一些选中的对象转换为JSON: from django.http import HttpResponse from django.core
我们可以使用TDD的方法来开发这些功能,并确保它们的正确性。...(): assert divide(10, 0) == float('inf') # 除以0应该返回无穷大再次运行pytest来验证边界情况的测试用例是否通过:pytest如果测试通过,那么我们的函数在边界情况下的行为就是正确的...假设我们的数学函数依赖于一个外部的日志模块,我们希望确保它在某些情况下正确地调用了日志模块。我们可以使用模拟来模拟日志模块的行为,并验证它是否被正确调用。...然后我们调用divide函数,并验证日志模块的error方法是否被正确调用了一次。运行pytest来验证集成测试是否通过:pytest如果测试通过,那么我们的集成测试就成功了。...我们从基本的单元测试开始,介绍了使用unittest和pytest等库编写测试用例的方法,并演示了如何使用TDD的方式来开发和测试代码,以及如何使用参数化测试来覆盖各种情况。
True(这是正确的),然而当Question在未来的日期内发布的时候也返回True(这是错误的)。...创建一个测试来暴露这个bug 刚才我们是在shell中测试了这个bug,那如何通过自动化测试来发现这个bug呢?...在找出一个bug之后,编写一个测试来验证这个错误,然后在代码中更正这个错误让我们的测试通过。...如果你当前settings.py中的的TIME_ZONE不正确,那么你或许得不到预期的结果。在进行下一步之前,请确保时区设置正确。...第一个是Question的快捷函数create_question,功能是将创建Question的过程封装起来。
“她是我心中最美的人”,姜戈对德国人说。 模板初体验 我们拿一个独立的templay.html文件作为模板。它放在templates/west/文件夹下。...循环与选择 Django实际上提供了丰富的模板语言,可以在模板内部有限度的编程,从而更方便的编写视图和传送数据。 我们下面体验一下最常见的循环与选择。...这样,我们可以使用base.html的主体,只替换掉特定的部分。...姜戈静静的说,“我懂得他的感受。”
Django是一种用Python编写的流行Web框架,遵循Model-View-Template(MVT)架构模式。...姜戈:使用 pip 包管理器安装 Django。打开你的终端或命令提示符,然后运行命令pip安装django。...在这里,您可以使用 Python 类来定义模型。...打开“myapp”目录中的“views.py”文件并定义视图函数。...步骤 8:定义 URL 模式 URL 模式确定应为给定 URL 调用哪个视图函数。
过滤时,有些字段是 “区间” 字段(比如时间),该如何处理 过滤时,有些字段是 “跨表” 后的 “区间” 字段,又该如何处理 #3 起步 #3.1 新建一个Django项目 . ├── app │...def salary_filter(self, queryset, name, value): return queryset.filter(Q(tea__salary__gte =...method 的值 如果是区间,可以使用django_filters.RangeFilter,如果不是区间可以使用其他 重写函数时,里面的参数不会自动补全 坑 使用Q时,一定不能使用or / and,只能使用...| & return 的数值,如果使用queryset.filter(xxx).filter(xxx),那么返回的结果是所有过滤的交集,如果每个自定义函数都返回自己过滤的数据(例如,models.Student.objects.filter...().filter()),那么过滤的结果是所有符合条件的并集 value的正确使用,value.start对应的是url中的min(salary_min),value.stop对应url的max(salary_max
同理,如果我想查询所有含有python这个tag的文章,可以这样编写queryset: Collection.objects.filter(detail__tags__contains='django'...他们的区别是:transform表示“如何去找关联的字段”,lookup表示“这个字段如何与后面的值进行比对”。...get_transform函数应该返回一个可执行对象,你可以理解为工厂函数,执行这个工厂函数,获得一个transform对象。...0x03 如何复现这个漏洞 分析了原因,复现的方法就呼之欲出了。...但是熟悉Django的同学也应该知道,Django的queryset使用方法是编写如下查询语句: .filter(detail__author='phith0n') 这个detail__author用户是无法控制的
本主题指南介绍如何使用Django查询生成和返回聚合值。...可以在QuerySet引用中找到可用聚合函数的列表。 Aggregate()是QuerySet的一个结束语句。...名称是根据字段名称和聚合函数自动生成的。如果要指定聚合值的名称,可以在指定聚合子句时提供指定的名称。...例如,可以使用查询生成所有书籍的注释列表。此列表的标题以“Django”开头。...很难直观地理解ORM如何将复杂的查询集转换为SQL查询。因此,如果有疑问,请使用str(queryset.query)`检查SQL并编写大量测试。
本文将探讨TDD的原则和实践,并介绍如何使用测试工具和方法来提高代码的质量。1.测试驱动开发的原则(1) 先写测试,再写代码在编写实际代码之前,先编写测试代码,明确需要实现的功能和预期的结果。...(2) 一次只做一件事每次只编写一个测试用例,并确保测试用例只验证一个功能。(3) 保持测试通过在编写实际代码之前,测试用例应该是失败的状态;然后编写足够的代码以使测试通过。...(3) 编写实际代码根据测试用例的要求,编写实际代码以使测试用例通过。(4) 重构代码一旦测试用例通过,可以对代码进行重构,提高代码的质量和可维护性。...3.使用测试工具和方法(1) 单元测试使用单元测试框架如JUnit(Java)、pytest(Python)等编写和运行单元测试,验证代码的各个单元(函数、类)的正确性。...4.示例代码说明以下是一个简单的示例代码,演示如何使用pytest框架进行单元测试:# app.pydef add(a, b): return a + b# test_app.pyimport pytestfrom
为此,admin提供了自定义功能函数actions的手段,可以批量对数据进行修改。admin内置了一个批量删除对象的操作,如下图所示: ?...但在多数情况下,你要自己遍历queryset的每个元素,并编写具体的操作。...也就是: for obj in queryset: do_something_with(obj) 还可以设置一个简单易懂的简短描述(可以使用中文),用于代替生硬的函数名: def make_published...(modeladmin, request, queryset): queryset.update(status='p') # 注意缩进,下面这句不在函数体内。...上面写的export_selected_objects函数可以是一个很好的例子。
编写一个基本的线性代数库 (linear algebra library),处理矩阵、矢量和相关乘法 给这个库增加SVD (Singular Vector Decomposition) 给这个库增加求逆矩阵功能...学习图论基础 每天学习并实践一个算法 [纸上谈兵] 理解分布式处理和分布式存储 (CAP理论,MapReduce算法,集群MySQL,PostgreSQL数据库) 针对Python的 尝试内置函数...[Python内置函数] 使用某个框架,比如Flask或Tornado,写一个简单的网站 [被解放的姜戈] 学习itertools模块 [循环器itertools模块] 开始玩CheckIO (Python
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...Manager,QuerySet,Model是django的ORM用到的三个类。 修改初始Manager QuerySets manager的基本QuerySet返回系统中的所有对象。...可以通过覆盖Manager.get_query_set()方法来重写manager的基本QuerySet。get_query_set()按照自定义的要求返回一个QuerySet。...当然,由于get_query_set()返回的是一个QuerySet对象,所以可以使用filter(),exclude()和其它一切QuerySet的方法。...像这些语法都是正确的: Book.yun_objects.all() Book.yun_objects.filter(title='Matilda') Book.yun_objects.count()
') #错误,无法修改关联表字段,只能修改Entry表的字段 Entry.objects.filter(blog__name='foo').update(comments_on=False) #正确...其它关键字在django中的实现 在SQL中,很多关键词在删、改、查时都是可以用的,如order by、 like、in、join、union、and、or、not等等,我们以查询为例,说一下django如何映射...2.4.3 annotate(无对应SQL关键字) 函数原型annotate(*args, **kwargs) 返回QuerySet 往每个QuerySet的model instance中加入一个或多个字段...,字段值只能是聚合函数,因为使用annotate时,会用group by,所以只能用聚合函数。...2.4.10 aggregate(*args, **kwargs)——对应聚合函数 参数为聚合函数,最好用**kwargs的形式,每个参数起一个名字。 该函数与annotate()有何区别呢?
request.query_params与Django标准的 request.GET相同,只是更换了更正确的名称而已。...它的作用:比如我们定义了一个视图,没有形参接收传递的参数,那么我们可以使用 self.kwargs从url地址中提取我们需要的数据。...3)在原视图函数中进行调用。 1.3.1扩展类5个详解 DRF框架提供了5个扩展类,封装了通用增删改查的流程。...,而这些方法与前面讲过的Mixin扩展类提供的方法同名,所以我们可以通过继承Mixin扩展类来复用这些方法而无需自己编写。...2.4视图集中添加额外的处理方法 1、直接在视图集中定义额外的处理方法即可 2、在进行url配置的时候指定请求地址请求方式和处理函数之间的对应的关系。
的确,大多数来自Django开发新手 的问题是如何能使得通用视图的使用范围更广。...这是通用视图在1.3发布中被重新设计的原因之一 - 之前,它们仅仅是一些函数视图加上 一列令人疑惑的选项;现在,比起传递大量的配置到URLconf中,更推荐的扩展通用视图的 方法是子类化它们,并且重写它们的属性或者方法...DetailView通用视图提供了一个publisher对象给context,但是我们如何在模板中添加附加信息呢?...然而,model参数并不是唯一能够指明视图要基于哪个对象进行操作的方法 – 你同样可以使用queryset参数来指定一个对象列表: from django.views.generic import DetailView...前面我们把出版 商的名字硬编码到URLconf中,但是如果我们想要编写一个视图来展示任何publisher的所有 图书,应该如何处理?
, 其他的测试可能会检查软件的整体运行是否正常(用户在对网站进行了一系列的操作后,是否返回了正确的结果?)。...在找出一个错误之后,我们编写一个测试来暴露这个错误,然后在代码中更正这个错误让我们的测试通过。...我们需要修改get_queryset方法并让它将日期与timezone.now()进行比较。...第一个是Question的快捷函数create_question,将重复创建Question的过程封装在一起。...测试 DetailView 一切都运行得很好; 然而,即使未来发布的Question不会出现在index中,如果用户知道或者猜出正确的URL依然可以访问它们。