Django 2.0版本的新特性抢先看!
前言 2017年12月2日,Django官方发布了2.0版本,成为多年来的第一次大版本提升,那么2.0对广大Django使用者有哪些变化和需要注意的地方呢? 一、Python兼容性 Django 2.0支持Python3.4、3.5和3.6。Django官方强烈推荐每个系列的最新版本。 最重要的是Django 2.0不再支持Python2! Django 1.11.x是支持Python2.7的最后版本。 二、2.0新特性 1.简化了URL路由语法
例如以前的: url(r'^articles/(?P<year>[0-9]{4})/$',views.year_archive), 可以写作: path('articles/<int:year>/', 新语法支持强制定义参数类型。例子中只接收整数型年份参数,不再接收字符串类型,同时“10000”年也是合法的(虽然是5位数字),而不像先前正则里只能接收4位数字。 以前版本的 2.admin后台对移动端更加友好 Django最受大家欢迎的admin后台,具有响应式特性,支持主流的移动设备。 3.Window 表达式 新的Window表达式允许为查询集添加一个OVER从句。 4.小特性 django.contrib.admin后台 新的 django.contrib.auth用户认证 PBKDF2密码哈希默认的迭代次数从36000增加到100000。 django.contrib.gis地理框架
django.contrib.postgres数据库
django.contrib.sitemaps站点地图
Cache缓存
File Storage文件存储
Forms表单
Generic Views通用视图
Management Commands管理命令
Migrations迁移
Models模型
Pagination分页
Requests and Responses请求和响应
Templates模版
Tests测试
Validators验证器 新的ProhibitNullCharactersValidator不允许CharField及其子类的表单输入为空; 三、重要的向后不兼容 1. 某些地方删除对bytestrings的支持 例如,对于 2. AbstractUser.last_name的最大长度增加到150 如果你有一个自定义的用户模型继承了AbstractUser,你需要生成并应用一个数据库迁移,使得last_name的最大长度变为150。 如果你需要为last_name保持30个字符的限制,可以如下使用自定义表单: from django.contrib.auth.forms import UserChangeForm class MyUserChangeForm(UserChangeForm): last_name = forms.CharField(max_length=30,required=False) 如果你需要在admin中也保持这个约束,那么可以如下使用UserAdmin.form: from django.contrib.auth.admin import UserAdmin from django.contrib.auth.models import User class MyUserAdmin(UserAdmin): form = MyUserChangeForm admin.site.unregister(User) admin.site.register(User,MyUserAdmin) 3. QuerySet.reverse()和last()不能用于切片后的查询集 对切片后的查询集使用反转和获取最近对象的操作将弹出异常,如下所示: >>> Model.objects.all()[:2].reverse() Traceback (most recent call last): ... TypeError: Cannot reverse a query once a slice has been taken. 4. 表单的字段不再接收可选参数作为位置参数 为了防止运行时错误,提高可靠性。以前类似下面的参数传递方法,现在是错误的了: forms.IntegerField(25,10) 要这么传递: forms.IntegerField(max_value=25,min_value=10) 5. Index不再接收位置参数 例如下面的用法将导致异常: models.Index(['headline','-pub_date'],'index_name') 要提供参数关键字,改写为: models.Index(fields=['headline',name='index_name') 6. call_command()将验证它接收的选项 对于使用选项而不是使用 class MyCommand(BaseCommand): stealth_options = ('option_name',...) 7. SQLite现在支持外键约束 另外,Django2.0还废弃和移除了一些方法和属性。 总结 好像也没多大变化,不是重度使用者,基本感受不出变化来,该怎么用还是怎么用,^-^! 好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |