3.0中向后不兼容的更改

数据库后端API

本节描述了第三方数据库后端中可能需要的更改。

  • 现在的第二个参数DatabaseIntrospection.get_geometry_type()是行描述,而不是列名。
  • DatabaseIntrospection.get_field_type() 可能不再返回元组。
  • 如果数据库可以在添加字段的同一SQL语句中创建外键,请添加SchemaEditor.sql_create_column_inline_fk适当的SQL;否则,请添加相应的SQL。否则,设置。DatabaseFeatures.can_create_inline_fk = False
  • DatabaseFeatures.can_return_id_from_insert并且 can_return_ids_from_bulk_insert被重命名为 can_return_columns_from_insertcan_return_rows_from_bulk_insert
  • 现在,数据库函数可以处理datetime.timezone使用datetime.timedelta实例创建的格式(例如 timezone(timedelta(hours=5))输出'UTC+05:00')。DateTimeField在,等中进行准备时datetime_cast_date_sql(), 第三方后端应处理此格式 datetime_extract_sql()
  • 条目AutoFieldBigAutoFieldSmallAutoField被添加到 DatabaseOperations.integer_field_ranges支持关于这些字段类型的整数范围的验证。第三方后端可能需要自定义默认条目。
  • DatabaseOperations.fetch_returned_insert_id()替换为, fetch_returned_insert_columns()它返回语句返回的值列表,而不是单个值。INSERT … RETURNING
  • DatabaseOperations.return_insert_id()替换为 return_insert_columns()接受fields 参数的参数,该参数是插入后要返回的字段的可迭代项。通常,这只是自动生成的主键。

django.contrib.admin

  • 管理员的模型历史记录更改消息现在倾向于使用更具可读性的字段标签,而不是字段名称。

django.contrib.gis

  • 不再支持PostGIS 2.1。
  • 删除了对SpatiaLite 4.1和4.2的支持。
  • 删除了对GDAL 1.11和GEOS 3.4的支持。

不再支持PostgreSQL 9.4

对PostgreSQL 9.4的上游支持将于2019年12月结束。Django3.0支持PostgreSQL 9.5和更高版本。

不再支持Oracle 12.1

对Oracle 12.1的上游支持将于2021年7月结束。Django2.2将一直支持到2022年4月。Django3.0正式支持Oracle 12.2和18c。

删除了专用的Python 2兼容性API

尽管在Django 2.0中删除了对Python 2的支持,但并未从Django中删除某些私有API,因此第三方应用程序可以继续使用它们,直到Python 2终止使用为止。

由于我们希望应用在添加对Django 3.0的支持时会降低Python 2的兼容性,因此我们目前正在删除这些API。

  • django.test.utils.str_prefix() -Python 3中的字符串没有'u'前缀。
  • django.test.utils.patch_logger()unittest.TestCase.assertLogs()改用。
  • django.utils.lru_cache.lru_cache()-的别名 functools.lru_cache()
  • django.utils.decorators.available_attrs()-此函数返回 functools.WRAPPER_ASSIGNMENTS
  • django.utils.decorators.ContextDecorator-的别名 contextlib.ContextDecorator
  • django.utils._os.abspathu()-的别名os.path.abspath()
  • django.utils._os.upath()npath()-这些功能在Python 3上不起作用。
  • django.utils.six-删除此供应商库的使用或切换到 六个
  • django.utils.encoding.python_2_unicode_compatible()-的别名 six.python_2_unicode_compatible()
  • django.utils.functional.curry()-使用functools.partial()或 functools.partialmethod。参见5b1c389603a353625ae1603
  • django.utils.safestring.SafeBytes -自Django 2.0起未使用。

对于新的默认值FILE_UPLOAD_PERMISSIONS设置

在旧版本中,该FILE_UPLOAD_PERMISSIONS设置默认为 None。使用默认值FILE_UPLOAD_HANDLERS,这会导致上载的文件具有不同的权限,具体取决于它们的大小和使用的上载处理程序。

FILE_UPLOAD_PERMISSION现在默认为0o644避免这种不一致。

安全设置新的默认值

为了使Django项目默认更安全,某些安全设置现在具有更安全的默认值:

有关这些更改的更多详细信息,请参见上面的“新增 安全性”部分

杂项

  • ContentType.__str__()现在包含了该模型app_label,可在不同应用中消除同名模型的歧义。
  • 因为不赞成在会话中而不是在cookie中访问语言,所以注销后不再在会话中LocaleMiddleware查找用户的语言,django.contrib.auth.logout()也不再保留会话的语言。
  • django.utils.html.escape()现在用于html.escape()转义HTML。这将转换''而不是先前的等效十进制代码'
  • 该选项现在工作作为选项,而不是作为一个快捷方式。django-admin test -kunittest -k--keepdb
  • pywatchman<1.2.0的支持已删除。
  • urlencode()现在可以对whener进行编码doseq=False,而不是对其进行迭代,从而使其与标准库urllib.parse.urlencode()函数保持一致。
  • intword模板过滤器现在转换1.0为单数短语,所有其他数值转换为复数形式。对于某些语言,这可能是不正确的。
  • 现在,将值分配给模型的ForeignKey或 属性会取消设置相应的字段。之后访问该字段将导致查询。OneToOneField '_id'
  • patch_vary_headers()现在 '*'根据RFC 7231#section-7.1.4,即,如果标头字段名称列表包含星号,则Vary标头将由单个星号组成'*'
  • 在MySQL 8.0.16+,PositiveIntegerFieldPositiveSmallIntegerField 现在包括检查约束,以防止数据库中的负值。
  • alias=None已添加到的签名 Expression.get_group_by_cols()
  • sqlparse<0.2.2的支持已删除。

Django3.0中向后不兼容的更改的更多相关文章

  1. Django3.0 前瞻 支持异步通信

    最近两年,Django的版本号提升得特别快,2.0还没有多久,很快就要到3.0了. 让我们先看看官方的路线图和时间表: 版本号 发布日期 停止更新日期 停止维护日期 3.0 2019-12 2020- ...

  2. 8.0后广播在AndroidManifest.xml中注册后发送intent接收不到广播

    8.0后广播在AndroidManifest.xml中注册后发送intent是接收不到广播了,看了一下原因,好像是8.0为了管理系统和节约电量特别针对广播和服务发送intent的方式启动做出的改变,也 ...

  3. Django3.0 异步通信初体验

    此前博主曾经写过一篇博文,介绍了Django3.0的新特性,其中最主要的就是加入对ASGI的支持,实现全双工的异步通信. 2019年12月2日,Django终于正式发布了3.0版本.怀着无比的期待,我 ...

  4. Django3.0 异步通信初体验(小结)

    2019年12月2日,Django终于正式发布了3.0版本.怀着无比的期待,我们来尝试一下吧! (附ASGI官方文档地址:https://asgi.readthedocs.io/en/latest/e ...

  5. Drawable 着色的后向兼容方案

    看到 Android Weekly 最新一期有一篇文章:Tinting drawables,使用 ColorFilter 手动打造了一个TintBitmapDrawable,之前也看到有些文章使用这种 ...

  6. 用 for/in 在 Java 5.0 中增强循环

    这个方便的构造提供了什么?什么时候适用于代码? Brett McLaughlin (brett@newInstance.com), 作者/编辑, O'Reilly Media, Inc. 简介: fo ...

  7. Android4.0中蓝牙适配器state machine(状态机)的分析

    今天晓东和大家来一起看一下Android4.0中蓝牙适配器(Bluetooth Adapter)的状态机变化的过程.首先,我们需要了解一下,蓝牙适配器究竟有哪些状态,从代码可以清晰地看到(framew ...

  8. php7 不向后的兼容的变更

    php7 不向后的兼容的变更 在php7中,很多致命错误以及可恢复的致命错误,都被转换为异常来处理了. 这些异常继承自Error类,此类实现了Throwable接口(所有异常都实现了这个基础接口) 这 ...

  9. Hadoop-2.2.0中国文档—— MapReduce 下一代 -- 公平调度

    目的 此文档描写叙述了 FairScheduler, Hadoop 的一个可插入式的调度器,同意 YARN 应用在一个大集群中公平地共享资源. 简单介绍 公平调度是一种分配资源给应用的方法.以致到最后 ...

随机推荐

  1. PHP将json或对象转成数组

    今天老大突然给了我一个小任务,给我一个txt文件,里边是很多的json字串,要求将这些字串转换成php中的数组: 于是开足火力,用了将进5分钟的时间完成了任务,代码如下: $jsonStr = fil ...

  2. 【代码总结】PHP面向对象之类与对象

    一.类和对象的关系 类的实体化结果是对象,而对象的抽象就是类.在开发过程中,我们通常都是先抽象(幻想)出一个类,再用该类去创建对象(实现幻想的内容).在程序中,直接使用的是我们(实现幻想)的对象,而不 ...

  3. 源代码管理工具(2)——SVN(2)——第一次用SVN遇到的问题

    今天因为项目的需要第一次使用了svn来托管项目,第一使用svn遇到了几个问题. 这个安装的过程很简单,不再赘述.在安装完成之后,相信肯定有一部分第一次用这个的人直接到开始处打开这个软件,这时候就会弹出 ...

  4. 原生js的表单验证

    最近在学原生的js,把一些练手的代码往博客放一放,权当积累经验,若有错漏,或是觉得浅显,大家不要见怪. 这是一个原生js编写的简单的表单验证: <!DOCTYPE html><htm ...

  5. JavaWeb项目音频资源播放解决方案

    一.方式1:登陆系统后进行播放,即在浏览器端 需要在JSP页面编写相关代码 <div id="midea" style="display: none;"& ...

  6. Jmeter_用户定义的变量

    1.线程组->添加->配置原件->用户定义的变量 2.自定义变量引用: ${ }

  7. 【PAT甲级】1046 Shortest Distance (20 分)

    题意: 输入一个正整数N(<=1e5),代表出口的数量,接下来输入N个正整数表示当前出口到下一个出口的距离.接着输入一个正整数M(<=10000),代表询问的次数,每次询问输入两个出口的序 ...

  8. 「AHOI2014/JSOI2014」奇怪的计算器

    「AHOI2014/JSOI2014」奇怪的计算器 传送门 我拿到这题首先是懵b的,因为感觉没有任何性质... 后来经过同机房dalao的指导发现可以把所有的 \(X\) 放到一起排序,然后我们可以发 ...

  9. December 21st, Week 51st Saturday, 2019

    May the odds be ever in your favor. 愿好运永远眷顾你. From The Hunger Games. May we all have good luck, and ...

  10. tensorflow版helloworld---拟合线性函数的k和b(02-4)

    给不明白深度学习能干什么的同学,感受下深度学习的power import tensorflow as tf import numpy as np #使用numpy生成100个随机点 x_data=np ...