django
Django 是 Python Web 开发最常用的框架之一,让我们来一起跟进它的最新变化吧。
Django 官方发布了 2.0 版本,成为多年来第一次的大版本提升,那么 2.0 版本有哪些新功能和需要注意的地方呢?
一、Python兼容性
Django 2.0 支持 Python 3.4、3.5 和 3.6。我们强烈建议并且仅支持每个版本的最新版。
Django 1.11.x是支持Python2.7的最后版本。
Django 2.0 将是支持 Python 3.4 的最后一个版本。如果您计划在Django 2.0(2019年4月)之后对Python 3.4进行部署,请使用Django 1.11 LTS(支持到2020年4月)。但请注意,Python 3.4的使用期限是2019年3月。
最重要的是 Django 2.0 不再支持 Python 2!全面进入 Python 3 的怀抱!
二、第三方库
在 Django 2.0 发布之后,我们建议第三方应用程序作者在1.11之前放弃对所有Django版本的支持。
三、Django 2.0 新功能
1. 简单的URL路由语法
url(r'^articles/(?P[0-9])/$', views.year_archive),
现在可以写为:
path('articles//', views.year_archive),
新的语法支持URL参数的类型强制。在这个例子中,视图将接收年份关键字参数作为一个整数,而不是一个字符串。而且,在重写的例子中,匹配的URL会稍微受到限制,例如,年份10000现在会被匹配,因为整数并不像正则表达式那样被限制为正好四位数。
2.适合移动设备的后台管理界面
管理员页面现在是响应式特性和支持所有主要的移动设备。较旧的浏览器可能会遇到不同程度的优雅降级。
3.Window 表达式
新的Window表达式允许为查询集添加一个OVER从句。
4.小特性
新的 ModelAdmin.autocomplete_fields 属性和 ModelAdmin.get_autocomplete_fields() 方法现在可以在外键和多对多字段上使用Select2搜索框。
PBKDF2密码哈希默认的迭代次数从36000增加到100000。
为AsGeoJSON、GeoHash和GeoHash方法,isvalid和distance查询增加MySQL支持;
添加Azimuth和LineLocatePoint方法,支持PostGIS和SpatiaLite;
所有从GeoJSON导入的GEOSGeometry拥有SRID集合;
添加 OSMWidget.default_zoom属性,用于自定义地图的默认缩放级别;
metadata现在是可读可编辑的;
允许在GDAL的内部虚拟文件系统中创建GDALRaster对象;
新的 GDALBand.color_interp()方法返回波段的颜色说明。
ArrayAgg 新增 distinct 参数;
新的 RandomUUID 函数。
现在支持 fastupdate 和 gin_pending_list_limit 参数;
新的 GistIndex 类允许在数据库中创建 GiST 索引;
inspectdb 现在可以内省 JSONField 和 RangeFields。
为GenericSitemap构造器增加protocol参数。
Cache缓存
cache.set_many()现在返回一个列表,包含了插入失败的键值。
File Storage文件存储
File.open() 现在可以用于上下文管理器,例如 :
with file.open() as f:
Forms表单
Generic Views通用视图
新的 ContextMixin.extra_context属性允许在 View.as_view()中添加上下文。
Management Commands管理命令
inspectdb现在将MySQL的无符号整数视作 PositiveIntegerField或者 PositiveSmallIntegerField。
新增 makemessages --add-location选项。loaddata现在可以从标准输入读入。
新增 diffsettings --output选项。
Migrations迁移
新增 squashmigrations --squashed-name选项。
Models模型
新增StrIndex数据库函数。
对于Oracle数据库,AutoField和BigAutoField现在会生成identity列。
QuerySet.iterator() 新增 chunk_size 参数。
QuerySet.earliest()、 QuerySet.latest() 和 Meta.get_latest_by 现在可以根据一些字段进行排序。
增加ExtractQuarter方法,用于DateField和DateTimeField。
新增 TruncQuarter 方法用于截取 DateField 和 DateTimeField 到季度的第一天。
为基于类的索引添加 db_tablespace参数。
为 QuerySet.select_for_update() 增加 of 参数,但只支持 PostgreSQL 和 Oracle 数据库。
QuerySet.in_bulk() 新增 field_name 参数。
CursorWrapper.callproc() 现在接收可选的字典类型关键字参数。
QuerySet.values_list() 新增 named 参数,用于获取命名的元组结果。
新的FilteredRelation类允许为查询集增加一个ON从句。
增加 Paginator.get_page(),可以处理各种非法页面参数,防止异常。
Requests and Responses请求和相应
现在,runserver服务器支持HTTP 1.1。
Templates模版
为了提高 Engine.get_default() 在第三方模块的用途,现在它将返回配置在TEMPLATES中的多个DjangoTemplates引擎中的第一个,而不是弹出ImproperlyConfigured错误。
自定义模版标签现在接收强制关键字参数。
Tests测试
为LiveServerTestCase添加多线程支持。
Validators验证器
新的ProhibitNullCharactersValidator不允许CharField及其子类的表单输入为空。
领取专属 10元无门槛券
私享最新 技术干货