Django环境配置及版本区别

2019-04-14 18:46发布

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(类名, '别名') 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版本。

Python虚拟环境的作用及搭建方法

  • 方式一
    打开Terminal/cmd,输入pip3 install django==1.11.9 控制django版本为1.11.9
    打开Terminal/cmd,输入pip3 install django自动安装最新版本django
  • 方式二
    使用Pycharm安装
    第一步:
    在这里插入图片描述
    第二步:
    在这里插入图片描述
    第三步:
    点击左下角 Install Package