Py学习  »  Django

在Django设置中使用Pathlib库

Python程序员 • 4 年前 • 311 次点击  

Django的默认配置总是包括BASE_DIR伪配置。我之所以称它为伪配置是因为它从不被Django自己使用。但是在设置基于路径的配置时,它是非常有用的。这一点Django的文档也提到过,而且在一些第三方的软件包中也用到了它。


到目前为止,Django以下述方式定义基本文件路径:


在3.1版本中,定义方式有了变化,然而如我曾阐述的那样,这是未来几个月的事情。得感谢Jon Dufresen和Custis Maloney的贡献,基本文件路径系统的定义方式是用Pathlib定义的。



注意,这仅仅是在新模板项目中。如果你升级一个旧的项目到Django3.1版本,你的配置文件是不会被改变的。


多亏有了提供面向对象文件系统路径的PEP 428模块,pathlib才被加到Python3.4版本的标准库中。另外,也多亏了文件系统路径协议PEE 519,所有的在Python中使用文件路径的函数都被增强以支持Pathlib.path对象(或是任何具有__fspath__ method的文件路径结构)。


Pathlib功能是非常强的!与os.path.join()相比,它的特点是:代码更简单直观、允许使用链式方法以及自动整理路径字符串。这些特性我们从使用BASE_DIR / 'subdir'定义一个子目录的过程中可以看到。而如果你希望能进一步了解,请看Trey Hunner的两篇文章:《为什么你应该使用pathlib》和《千真万确,pathlib是强大的》。


尽管这是将来的事情(当然,如果您能穿越则另当别论),不过你也可以在此时转换你的项目来实现它(或者,如果你使用的是Django 3.1+。那么即使你的项目之前已经启动,你还是能进行转换)。


如果你以前没有使用过pathlib,我认为现在是一个尝试的好机会。


如果你想尝鲜,你很可能需要从Django本身的代码开始复制。首先复制BASE_DIR的新定义,然后调整使用到它的地方。比如:STATICFILES_DIRS的定义方式就发生了变化,从:



到:



如果你正在使用的是Python3.6+版本,那么你不必一次性转换所有的用法。PEP 519意味着os.path.join()也被增强为接受Path对象。


英文原文:https://adamj.eu/tech/2020/03/16/use-pathlib-in-your-django-project/ 
译者:超音速

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/57224
 
311 次点击