Django Debug Mode对静态文件的支持

Django开发中,默认会搜集和处理静态文件。但部署产品关闭Debug模式后,静态文件不可用,因Django本身静态处理低效。开发者可设置wsgi server支持存取,也可使用whitenoise实现。此外,关闭Debug模式还会遇到log打印问题,文中也给出了解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django开发中,我们一般都不管static文件(CSS,JS,picture…)的位置。其实这是因为Django已经帮我们搜集和处理这些静态文件。缺省的搜集目录是:

  • 每个app内部的static目录;
  • STATICFILES_DIRS 定义的附加目录。

在我们需要deploy产品的时候,我们需要把Debug mode关闭。这个时候,当在我们访问主页,这些静态的文件就会变的不可用。

这是因为Django本身的static处理过于低效。在Debug模式被关闭之后,Django假定所有的静态文件都需要通过wsgi协议接口来存取。开发者需要设置单独的wsgi server来支持Django的静态文件存取。

如果你是开发一个大网站,建议你通过Apache或其它方式来运行wsgi。你可以在这里得到更多信息:
https://docs.djangoproject.com/zh-hans/2.2/howto/deployment/wsgi/

但是对许多小网站来说,附加的开发和配置会让事情变得过于复杂。那么Django自己有没有app可以直接支持wsgi呢?答案是有的。下面就是具体一步步来实现这个。

第一步:安装whitenoise

这个就是一个python写的遵循wsgi的包。你需要安装它。

pip install whitenoise

第二步,添加middleware
需要在Django里面添加中间件。这些中间件其实就是一些钩子函数。

#settings.py
MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',
  ...
]

第三步: 添加如下内容在你的settings.py最后。

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static_dep")
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

STATIC_URL 这个就是你的网页URL地址中静态文件的相对位置。
STATIC_ROOT是在deployment的时候,静态文件在文件系统中的最终绝对路径。
STATICFILES_STORAGE 让你的所有静态文件支持压缩。比如一个233K的Jquery,通过压缩之后,只需要传输72K。
STATICFILES_DIRS : 是附加的静态文件在开发阶段的存放位置。

第四步:运行manager.py去搜集所有的static文件到目的目录。

python manage.py collectstatic

Django将会搜索STATICFILES_DIRS 以及各个App/static目录,然后拷贝到STATIC_ROOT。
然后压缩各个文件生成固定版本的压缩文件。下载的时候,压缩文件将会被传输。
如果你修改啦静态源文件,记得重新运行这个命令。它有版本控制来区分压缩文件。

Log 功能
此外,当Debug mode关闭之后,你会遇到log打印不出来的情况。这让开发很低效。
把下面的内容copy到你的settings.py最后。是不是log又回来啦?
记得在真正deploy的时候注释掉这段内容。

#This is logging in deployment
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
        },
    },
    "loggers": {
        "django": {"handlers": ["console"], "level": "INFO"},
    },
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值