1 吐槽
Django本身不提供文件服务,它把这个任务留给你选择的Web服务器。这是Django帮助文档的原话:
Django doesn’t serve files itself; it leaves that job to whichever Web server you choose.
Django很贴心的提供了一个“静态文件收集”的功能,把所有的静态文件收集到一处,由Web服务器提供,通常是Nginx或者Apache。
我认为,这跟Django的“模块化”的设计理念是相悖的,难道静态文件不是“模块”的一部分?这让模块的复用徒增烦恼。
2019年5月21日修订:现在我知道了django这么做的智慧所在,由于it工业前端、后端的分工,这样做可以把两者的工作隔离开。
2 思路
Django官方推荐的方法,是使用Nginx或者Apache提供静态文件。百度、谷歌搜索来的方案也多是这两种。
实际上,我的网站并没有使用任何静态文件,我的静态文件是由unpkg.com提供的,需要本地提供的,仅仅是Django自己的admin的静态文件。
总共119个css、js之类的文件,用户仅限管理员。动用Nginx或者Apache,四八四太劳师动众了?
反正,看着Django给出的Nginx或者Apache的配置文档,就觉得头疼。主要还是懒。
虽然说,uwsgi“不擅长处理静态文件”,但我决定试一试。
3 操作
3.1 设置setting.py
STATIC_ROOT =os.path.join( BASE_DIR, 'static/' )
3.2 创建文件夹
在项目路径下创建。
$ mkdir static
3.3 收集静态文件
$ python manage.py collectstatic
3.4 修改uwsgi.ini
static-map = /static=<项目路径>/static
3.5 启动
$ uwsgi --ini uwsgi.ini
4 后记
使用uwsgi提供静态文件,有两种方法。
本文使用的叫“路径映射”。
还有一种叫“高级路由”,我没有实验成功。