在 django 的setting.py
里可以设置 debug 和 production 模式:
DEBUG = True # 其中True代表debug模式,False表示为生产模式:
TEMPLATE_DEBUG = True
在 debug 模式下, django 会自己处理静态文件。但在生产模式,静态文件会被 django 过滤,需要另外配置 nginx 服务器来处理静态文件。
这个是符合绝大部分工作的实际情况,也符合实际管理。这其中的原因包括处理效率、减少网络堵塞等。
但我这边有特殊的需求,静态文件包括一些用户下载的文件,我们用 django 来控制不同用户的查看和下载权限,而用户信息在 django 里,所以我们必须让 django 来处理静态文件,即使在生产模式下。
一个最简单的方法就是直接在urls.py
增加路由:
import django
from django.urls import re_path
urlpatterns = [
# ...
re_path(r'^static/(?P<path>.*)$', django.views.static.serve,
{'document_root': "static/"}),
]
这样生产环境下也会对静态文件做处理,而且经过权限控制的中间件,从而适用了权限控制。
Q. E. D.