Django自带的runserver虽然功能全面,动静处理都搞得定,但是毕竟性能低下,生产环境是不能用的。所以有必要结合nginx进行生产环境的部署,这一节我们先来看看静态资源的处理。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
文章目录
操作环境
- Django 2.2.10 LTS
- Python 3.7(Anaconda 3)
- Nginx 1.16.1
动静分离
首先必须要明白,nginx做为一个web服务器,处理静态资源是其强项,但是其不能完成Django的MTV模型这种动态处理的能力。所以生产环境中必须要做到动静分离,nginx做为主门户,将静态资源自己处理,而其余请求转交给django来处理。如下图所示
其中①是浏览器发来的http请求,有css、js、图片、文档这一类静态资源请求的时候直接②nginx本地处理。同时nginx通过socket连接到wsgi以及后面的django,当有动态处理需求的时候通过③转交到wsgi再到④django,最后返回。这一节我们主要是看①和②,后面的wsgi+django的配合下一节我们再详细说。
Django的静态资源处理
在真正了解nginx的静态资源处理之前,还是有必要先对django自带的静态资源处理了解清楚,毕竟测试环境还是会用得到的。
想要django自带的runserver能处理静态资源,必须在配置文件settings.py
中做如下设定
-
DEBUG = True
,这也间接说明了处理静态资源不是自带runserver的强项,记住千万别在生产环境使用 -
STATIC_URL = '/static/'
,如果是应用级别的静态资源,用该字段声明根目录,数据类型为string -
如果是全局的静态资源,用
STATICFILES_DIRS
字段声明根目录,数据类型为list,例如STATICFILES_DIRS = [ os.path.join