class="markdown_views prism-atelier-sulphurpool-light">
关于版本问题
为什么要装两个版本?
Django 2.0支持Python 3.4,3.5和3.6,不再支持python2.x
Django 1.11.x是支持Python 2.7的最后一个版本。
Django 2.0是最后一个支持Python 3.4的版本,并且只支持到2019年4月,到时如果你仍然计划使用Python 3.4,可以用Django 1.11 LTS(支持到2020年4月)。 不过需要注意的是,Python 3.4的使用期限是2019年3月。
目前来说,博主还是习惯使用Django1.11.9版本,但是人总是要往高处走的嘛,我们要慢慢的向Django2.x前进,及时更新自己!
Django2.x与Django1.11.9区别:
路由层的区别
django 1.11.9使用的是url函数
django 2.x使用的是path和re_path函数,其中,re_path函数与url函数使用方法完全相同。path函数中,第一个参数为绝对匹配,写什么就匹配什么。
Django 2.x 默认支持以下5个转化器:
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
对于一些复杂或者复用的需要,可以定义自己的转化器。转化器是一个类或接口,它的要求有三点:
regex 类属性,字符串类型
to_python(self, value) 方法,value是由类属性 regex 所匹配到的字符串,返回具体的Python变量值,以供Django传递到对应的视图函数中。
to_url(self, value) 方法,和 to_python 相反,value是一个具体的Python变量值,返回其字符串,通常用于url反向引用。
栗子:
第一步: 定义一个类,其中必须定义一个变量:regex,两个方法:一个to_python,一个to_url
class FourDigitYearConverter :
regex = '[0-9]{4}'
def to_python ( self, value) :
return int ( value)
def to_url ( self, value) :
return '%04d' % value
第二步:使用register_converter 将其注册到URL配置中,然后就可以使用了
from django. urls import register_converter, path
from . import converters, views
register_converter( converters. FourDigitYearConverter, 'yyyy' )
urlpatterns = [
path( 'articles/2003/' , views. special_case_2003) ,
path( 'articles//' , views. year_archive) ,
. . .
]
模型层的区别
ForeignKey需要手动指定on_delete参数:ForeignKey(to=‘Publish’, to_field=‘id’,on_delete=models.CASCADE)
新增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(),可以处理各种非法页面参数,防止异常;
管理后台样式自适应,支持移动端浏览器了
以前admin在移动端是显示不完整的,需要左右拉动才能浏览完整
Django2.0的admin在移动端下会自动换行显示
也就是说,Django2.0的admin具有响应式特性,适配主流移动端机型。
重要更新
表单的字段不再接收可选参数作为位置参数
为了防止运行时错误,提高可靠性。以前类似下面的参数传递方法,现在是错误的了:
forms.IntegerField(25, 10)
应该这样传递:
forms.IntegerField(max_value=25, min_value=10)
index不再接收位置参数
例如下面的用法将导致异常:
models.Index([‘headline’, ‘-pub_date’], ‘index_name’)
要提供参数关键字,改写为:
models.Index(fields=[‘headline’, ‘-pub_date’], name=‘index_name’)
QuerySet.reverse()和last()不能用于切片后的查询集
对切片后的查询集使用反转和获取最近对象的操作将弹出异常,如下所示:
Model.objects.all()[:2].reverse()
Traceback (most recent call last):
…
TypeError: Cannot reverse a query once a slice has been taken.
下载Django框架
博主建议:配置两个虚拟环境,一个安装django1.11.9版本,另一个安装django2.x版本。
方式一
打开Terminal/cmd,输入pip3 install django==1.11.9 控制django版本为1.11.9
打开Terminal/cmd,输入pip3 install django自动安装最新版本django
方式二
使用Pycharm安装
第一步:
第二步:
第三步:
点击左下角 Install Package