这篇文章介绍了我在每个 Django 项目中都使用的 20 个包。它们为我节省了大量时间,希望对你也有帮助。...SQL 查询、请求和响应,以及一般性能分析。...django-storages[9] 你是否在处理用户上传的内容(在 Django 中通常称为“media”),或者为静态文件使用专用的 CDN(如 S3)?...pytest-django[14] 虽然 Django 内置了测试工具,但 pytest 和 pytest-django 插件在社区中被广泛使用。...gunicorn[18] gunicorn 是最受欢迎的基于 WSGI 的 Python 服务器之一,它易于使用和上手,但有足够的配置选项来在必要时进行调整。
本报告基于 2023 年 9 月至 10 月进行的第三次年度 Django 开发者调查,是 Django 软件基金会和 PyCharm 之间的合作成果。...为了帮助我们更好地了解框架的当前状态及其周围的生态系统,来自世界各地的大约 4,000 名 Django 用户和爱好者参加了调查。...【注3】:调查者大部分来自欧洲(44%)和北美(19%)和亚洲(17%),中国大陆只占2%。 摘要 • 大部分(64%)用户在工作和个人项目中都使用Django。...的使用r 大部分(64%)用户在工作和个人项目中都使用Django。...大部分用户使用Django的最新的稳定版本。 Q:你如何创建Django项目? 71%的用户从头开始。 17%的用户使用 Cookiecutter Django 创建。
前言 本节讨论安装和使用第三方插件 插件安装 安装第三方插件很容易 pip : pip install pytest-NAME 卸载插件 pip uninstall pytest-NAME 如果安装了插件...下面是一些流行插件的注释列表: pytest-django: 编写测试 django 应用程序,使用pytest集成。...pytest-instafail: 在测试运行期间报告失败。 pytest-bdd: 使用行为驱动测试编写测试。 pytest-timeout: 根据函数标记或全局定义使测试超时。...在测试模块中加载插件 您可以在conftest文件中 使用 pytest_plugins : pytest_plugins = ("myapp.testsupport.myplugin",) 当加载测试模块或...找出哪些插件处于活动状态 如果您想知道哪些插件在您的环境中处于活动状态,可以键入: pytest --trace-config 将得到一个扩展的测试头,显示激活的插件及其名称。
配置使用mysql数据库 之前我们使用的是Django中自带的数据库sqlite数据库。 这篇文章让我们切换成mysql,不会MySQL基础的可以去查询数据库篇的文章。...注意:我们在添加属性的时候如果影响了表结构,就需要迁移,default和blank不影响表结构。 更多模型字段,请参考Django官方文档。写的明明白白。...查询集的特性 1、惰性查询 只有当我们使用数据的时候,才会在mysql中去查询。...2、缓存 当我们使用同一个查询集的时候,只有第一次是执行到数据库,然后把结果储存起来,当我们再次使用这个查询集的时候,就会调用我们缓存中的数据。...objects是models.Manger的一个对象,也就是说objects继承于models.Manger。 同样我们可以不使用Django帮我们生成的,我们可以自己创建一个。 为什么要自己创建?
和大多数框架一样的工具,在提供多种使用模式的时候一定会改变测试,随着测试,某些测试的开发可能会造成一些后果。时仍能保证测试效果和测试效率。...然而,即使是一个小的测试集也需要相当数量的模板代码。 写一个测试套件,只是为了确保 unittest 在项目中正常工作。我们可能想写一个总是通过的测试和一个总是失败的测试。...pytest-django[4]插件提供了一个django_db标记。任何没有这个标记的测试在试图访问数据库时都会失败。第一个试图访问数据库的测试将触发Django测试数据库的创建。...pytest-django pytest-django[9]为处理Django测试提供了一些有用的fixtures 和 marks。...py文件调用一次 scope="session" 以实现多个.py跨文件使用一个session来完成多个用例 运行参数 你们可能会有这样的疑问,现在大家都在用类似Pycharm的IDE工具,为什么还要去学习命令行运行的参数和方式呢
文章目录 一、基础条件查询 1.基本查询 2.过滤查询 3.F和Q对象 4.聚合函数和排序函数 5.关联查询 6.查询集QuerySet ---- 一、基础条件查询 1.基本查询 get查询单一结果,如果不存在会抛出模型类...答:使用F对象,被定义在django.db.models中。 语法如下: F(属性名) 例:查询阅读量大于等于评论量的图书。...,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。...聚合函数包括:Avg平均,Count数量,Max最大,Min最小,Sum求和,被定义在django.db.models中。 例:查询图书的总阅读量。...使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。
上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的介绍F对象、Q对象、聚合查询等功能。...缓存:使用同一个查询集,第一次使用时会发生数据库的查询,然后把结果缓存下来,再次使用这个查询集时会使用缓存的数据。 查询集的缓存 每个查询集都包含一个缓存来最小化对数据库的访问。...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。...示例一: 经过存储后,可以重用查询集,第二次使用缓存中的数据。...,都进行这个查询集的执行,所以mysql执行日志有两次,如下: 限制查询集 可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。
上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的介绍F对象、Q对象、聚合查询等功能。...缓存:使用同一个查询集,第一次使用时会发生数据库的查询,然后把结果缓存下来,再次使用这个查询集时会使用缓存的数据。 查询集的缓存 每个查询集都包含一个缓存来最小化对数据库的访问。...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。...示例一:经过存储后,可以重用查询集,第二次使用缓存中的数据。...,都进行这个查询集的执行,所以mysql执行日志有两次,如下: 限制查询集 可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。
过滤器基于所给的参数限制查询的结果,从Sql的角度,查询集和select语句等价,过滤器像where和limit子句。 返回查询集的过滤器如下: all():返回所有数据。...缓存:使用同一个查询集,第一次使用时会发生数据库的查询,然后把结果缓存下来,再次使用这个查询集时会使用缓存的数据。 查询集的缓存 每个查询集都包含一个缓存来最小化对数据库的访问。...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。...限制查询集 可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。 注意:不支持负数索引。 对查询集进行切片后返回一个新的查询集,不会立即执行查询。...说明:关系属性使用self指向本类,要求null和blank允许为空,因为一级数据是没有父级的。
答:使用F对象,被定义在django.db.models中。 语法如下: F(属性名) 例:查询阅读量大于等于评论量的图书。...,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。...QuerySet 1 概念 Django的ORM中存在查询集的概念。...查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。...,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。
为什么阿里规范需要自定义线程池 如果使用Executors中JDK提供好的线程池如newFixedThreadPool、newSingleThreadExecutor、newCachedThreadPool...、这些都是使用ThreadPoolExecutor进行实现的,但是他们的工作队列都是采用的无边界的LinkedBlockingQueue,当提交任务过多,核心线程处理不过来的时候,任务会大量堆积在LinkedBlockingQueue...中,而此时会造成OOM的异常。...ThreadPoolExecutor中重要的字段 1.ctl是一个32位的int类型字段,其中高3位表示线程池的状态,由于线程池有5个状态,如果使用2位表示是不够的,所以使用高3位表示线程状态,低29...runStateOf方法的作用相当于求rs和wc的并集,即把线程池状态和线程数量进行合并成为ctl。
为了确保所有相关对象都能和付款流程实例一同创建,我们使用了一个数据库事务。 新创建的这个实例现在代表系统中的一个付款流程,其中付款模块负责完成付款操作。...付款到账时,顶级应用会收到通知 在 Django 中,使用信号(signal)是避免循环依赖并保持模块解耦的一种方法: # payouts/signals.py from django.dispatch...N 个接收者 使用这个模式时,如果你有 N 个接收者,那么每次调度都会导致 N-1 个无用的查询。可以向信号添加一些上下文来避免这种情况。...还好 pytest-django 实现了等效的功能。...关于信号的官方文档也将这一点作为使用信号的主要原因: Django 包含一个“信号调度器”,它允许互相解耦的应用在框架中的其他地方发生动作时得到通知。
通过使用 ORM,我们只需要操作 Author 和 Blog 对象,而不用操作相关的数据库表。这里主要介绍一下 Django ORM 的相关使用。...对象和关系之间并不是完美映射 一般来说 ORM 足以满足我们的需求,如果对性能要求特别高或者查询十分复杂,可以考虑使用原生 SQL 和 ORM 共用的方式 Django ORM 在 Django 框架中集成了...`id` = 1 迭代:在首次迭代查询集时会执行数据库查询 切片(限制查询集):对查询集执行切片操作时,指定 step 参数 序列化/缓存 repr:对查询集调用 repr 函数 len:对查询集调用...和 select_related 类似,prefetch_related 在查询时会同时取出关联实例的值。...一些优化 如果只需要判断实例是否存在,使用 exists 更高效 如果只需要得到实例的数量,使用 count 函数
一 QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 。它等同于SQL 的LIMIT 和OFFSET 子句。...理解它是如何工作的将让你编写最高效的代码。叫做queryset缓存空间 在一个新创建的查询集中,缓存为空。...查询集不会永远缓存它们的结果。当只对查询集的部分进行求值时会检查缓存, 如果这个部分不在缓存中,那么接下来查询返回的记录都将不会被缓存。所以,这意味着使用切片或索引来限制查询集将不会填充缓存。...总结: queryset的cache是用于减少程序对数据库的查询,在通常的使用下会保证只有在需要的时候才会查询数据库。 使用exists()和iterator()方法可以优化程序对内存的使用。...但是对于多对多关系,使用SQL语句解决就显得有些不太明智,因为JOIN得到的表将会很长,会导致SQL语句运行时间的增加和内存占用的增加。
3.MVT模式(Model模型、View视图、Template模板) 5.URL配置 Django默认url配置风格是在末尾加 /,在子应用中进行url地址配置的时候,建议严格匹配开头和结尾。...{% empty %} # 遍历为空时的逻辑 {% endfor %} 13.2.3模板过滤器 a) Jinja2模板过滤器使用 {{ 模板变量|过滤器(参数...)}} b) Django中模板过滤器的使用...QuerySet(查询集) exclude 查询条件 返回不满足条件的所有数据 QuerySet(查询集) order_by 排序字段 对查询结果进行排序 QuerySet(查询集) aggregate...()过滤器调用聚合函数 排序: 排序默认是升序,降序在排序字段前加- 使用order_by 关联查询: 1.查询和指定对象关联的数据 # 由1查多 一对象.多类名小写_set.all() 例:book.heroinfo_set.all...查询结果的缓存 使用同一个查询集时,只有在第一次使用查询集时会进行数据库的查询操作,然后Django框架就会把查询的结果存起来,下一次再使用这个查询集时,使用的Django之前存储的结果。
QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 。它等同于SQL 的LIMIT 和OFFSET 子句。...在一个新创建的查询集中,缓存为空。首次对查询集进行求值 —— 同时发生数据库查询 ——Django 将保存查询的结果到查询集的缓存中并返回明确请求的结果(例如,如果正在迭代查询集,则返回下一个结果)。...查询集不会永远缓存它们的结果。当只对查询集的部分进行求值时会检查缓存, 如果这个部分不在缓存中,那么接下来查询返回的记录都将不会被缓存。所以,这意味着使用切片或索引来限制查询集将不会填充缓存。...总结: queryset的cache是用于减少程序对数据库的查询,在通常的使用下会保证只有在需要的时候才会查询数据库。 使用exists()和iterator()方法可以优化程序对内存的使用。...但是对于多对多关系,使用SQL语句解决就显得有些不太明智,因为JOIN得到的表将会很长,会导致SQL语句运行时间的增加和内存占用的增加。
在本文中,我们介绍如何安装和使用pytest第三方插件,对于如何自己开发pytest插件,我们后续写文继续更新。...下面我们看一下一些常用的插件及介绍: pytest-django: 为django应用编写测试,使用pytest集成 Pytest-twisted: 为twisted应用编写测试 Pytest-cov:...覆盖率报告,兼容分布式测试 pytest-xdist: 将测试分发到cpu和远程主机,以沙盒模式运行(允许分段错误存活),以loop on failing模式运行,在文件更改时自动重新运行失败的测试.../en/8.1.x/reference/plugin_list.html#plugin-list 这里官方提供的数百种插件供你选择和使用。...根据官方的说明:并不建议在非根conftest.py文件中使用pytest_plugins变量来加载指定的插件,所以这种方式大家了解一下,不熟悉pytest底层机制的人,不建议使用。
简介 查询集表示从数据库中获取的对象集合 查询集可以含有零个、一个或多个过滤器 过滤器基于所给的参数限制查询的结果 从Sql的角度,查询集和select语句等价,过滤器像where和limit子句 接下来主要讨论如下知识点...查询集 字段查询:比较运算符,F对象,Q对象 查询集 在管理器上调用过滤器方法会返回查询集 查询集经过过滤器筛选后返回新的查询集,因此可以写成链式过滤 惰性执行:创建查询集不会带来任何数据库的访问...():返回第一个对象 last():返回最后一个对象 exists():判断查询集中是否有数据,如果有则返回True 限制查询集 查询集返回列表,可以使用下标的方式进行限制,等同于sql中的limit和...,[0:1].get()引发DoesNotExist异常 查询集的缓存 每个查询集都包含一个缓存来最小化对数据库的访问 在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中...() print([e.title for e in querylist]) print([e.title for e in querylist]) 何时查询集不会被缓存:当只对查询集的部分进行求值时会检查缓存
Django有两种过滤器用于筛选记录: filter:返回符合筛选条件的数据集 exclude :返回不符合筛选条件的数据集 链式调用: 多个filter和exclude可以连接在一起查询 Person.objects.filter.../缓存集 查询集的缓存:每个查询集都包含一个缓存,来最小化对数据库的访问 在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,django会将查询出来的数据做 一个缓存,并返回查询结果...,以后的查询直接使用查询集的缓存。...- 都不会真正的去查询数据库 - 懒查询 - 只有我们在迭代结果集,或者获取单个对象属性的时候,它才会去查询数据 - 为了优化我们结果和查询 获取单个对象:...的查询方式,不允许使用连续的下划线 库 ·定义属性时,需要字段类型,字段类型被定义在 django.db.models.fields目录下,为了方便使用, 被导入到django.db.models
过滤后的结果集是独立的 每次你筛选一个结果集,得到的都是全新的另一个结果集,它和之前的结果集之间没有任何绑定关系。每次筛选都会创建一个独立的结果集,可以被存储及反复使用。...其他查询集方法 大多数情况使用 all(), filter() 和 exclude() 就足够了。...限制查询集范围 可以用 python 的数组切片语法来限制你的 QuerySet 以得到一部分结果。它等价于SQL中的 LIMIT 和 OFFSET 。...关系也是可逆的。可以在目标 model 上使用源 model 名称的小写形式得到反向关联。...针对这两种情况,Django 用一种很方便的方式来使用 filter() 和 exclude()。对于包含在同一个 filter() 中的筛选条件,查询集要同时满足所有筛选条件。
领取专属 10元无门槛券
手把手带您无忧上云