今天无意看到 django 3.1 的升级记录就开始更新 django 了,然而只是更新了核心文件,项目层的都没有变,

就需要手动改从 3.0.* 升到 3.1 的文件

很想说,官方还没有完全改完吧... 因为只改了 settings 的文件(要不去提交一波 只需要把 settings 的 os 改成

from pathlib import Path
BASE_DIR = Path(__file__).resolve(strict=True).parent.parent

如果你想再把自己的静态文件和媒体文件给改一下

STATICFILES_DIRS = [str(BASE_DIR / Path('assets') / Path('static')), ]
STATIC_URL = '/assets/static/'
MEDIA_ROOT = str(str(BASE_DIR / Path('assets') / 'uploads'))
MEDIA_URL = '/assets/uploads/'

os 模块改成 -> pathlib 模块

因为要去修改,特地得补了下 python pathlib 模块的知识

最底下有两个模块的对比

看完了官方文档,卧槽,太乱了,什么好感都没有


然后,我去谷歌了一把,果然看到了好多对 pathlib 模块的添狗文章 而且因为 django 的更新,微信公众号也多了好多了对这个模块的介绍

Image

感觉挺好的文章

都是因为他们喜欢短的

Image

这是我自己使用两个模块的对接,当知道 / 的操作,还真的挺爽的,好感度有这么上升 唯一不好的是,输出不是纯字符,得自己格式化 .... 觉得舒服的应该就是这个写法吧

那好,我们来分析一下官方文档, 正如官方所说 from pathlib import Path 是主类,主要功能在这里 可以粗略地看完纯路径和通用性质 斜杠 / 操作符有助于创建子路径,就像 os.path.join() 一样,就像上面一样,使用 / 连接,挺爽的

基本用法是:

p = Path('/home/ubuntu')

返回一个对象,PosixPath('/home/ubuntu'),所以我上面说可以粗略代过

str(p)  # 返回字符串 '/home/ubuntu'

它可以用 parents 访问父级 因为是面对对象且是 Path 主类,既可以直接通过 p.操作访问后缀啊等等,而且可以不再是嵌套调用 它还可以直接读取文件,写入文件,创建文件,不需要 with open 操作了