前言:
此时各位老铁们对“nginx禁止访问png”大约比较关切,咱们都需要学习一些“nginx禁止访问png”的相关知识。那么小编在网络上搜集了一些有关“nginx禁止访问png””的相关文章,希望同学们能喜欢,大家快快来了解一下吧!本文讲解了Django中Static文件和Media文件的区别,以及它们在开发环境和生产环境的用法。
一、Django中Static files和Media files的定义和区别
1.Static files包括CSS样式文件、Javascript文件、字体文件和图片媒体文件等,一般存放在项目的Static文件夹中。而且这些文件和代码文件放在一起,可以进行版本控制。
2.Media files主要指的是用户上传到网站中的文件,这里的文件基本上是使用网站过程产生的内容,需要和数据库一样定时备份。
3.为什么需要把两种文件区分开?首先我们不能完全信任用户上传的media文件,另外如果不区分的话,用户上传media文件还有可能破坏掉static静态文件。
二、Static files静态文件的使用
1.在Settings.py中配置如下内容:
STATIC_URL:很多人在Django入门的时候,分不清楚STATIC_URL和STATIC_ROOT。简单来说,URL就是在浏览器中输入的那串路径,STATIC_URL代表静态文件的URL从哪里开始,例如默认一般是/static/,代表访问静态文件就从这里开始,比如访问某一个css文件,就是。
STATIC_ROOT:Django程序真正存储static静态文件的绝对路径。这里指的路径是指存储在服务器上的路径,windows下一般是D:\Home\webs\abc_project\static,Linux中一般是/home/webs/abc_project/static。
STATICFILES_DIRS: 很简单,指定其他存放Static文件的路径。
2.命令语句
Django中很多app内,都会有一个Static文件夹,使用 collectstatic命令,将会把各个app内的static文件拷贝到static_root的文件夹内,为了防止同名覆盖,拷贝的规则是<app_name>/static。
python manage.py collectstatic
3.模板标签
在模板中使用静态文件,一般都是引用css文件、Javascript文件和图片文件,类似这样,先load static, 然后按照这个方式引用
{% load static %}<link rel="stylesheet" href="{% static 'app/css/base.css' %}">
4.开发模式下配置Static files
Settings.py中设置
# settings.pyDEBUG = TrueSTATIC_URL = '/static/'STATIC_ROOT = BASE_DIR / 'staticfiles'STATICFILES_DIRS = [BASE_DIR / 'static',]STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
5.生产模式下配置Static files 配置WhiteNoise
安装 pip install whitenoise在SecurityMiddleware中间件之后,配置好whitenoise的中间件
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', # <---- WhiteNoise! 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]设置whitenoise支持压缩和缓存(可选),在settings.py中设置:
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
三、Media files的使用
前面我们说过,Media files主要是用户上传的文件,而且上传的时候,后台一般都会关联着FileField或者ImageField,并且将相关上传的文件信息存储到数据库中。在配置上,主要是配置好MEDIA_URL和MEDIA_ROOT,这两个参数和Static files静态文件很像,就不多做解释了。
1.开发模式中配置Media files
首先在settings.py中定义好如下内容:
MEDIA_URL = '/media/'MEDIA_ROOT = BASE_DIR / 'uploads'
其次在项目urls.py中增加一个static路径作为media的url和root:
from django.conf import settingsfrom django.conf.urls.static import staticfrom django.contrib import adminfrom django.urls import path, includeurlpatterns = [ path('admin/', admin.site.urls), # ... the rest of your URLconf goes here ...]if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
2.生产模式中配置Media files
生产模式下一般无法使用whitenoise,所以最佳的办法就是使用nginx,具体配置方法如下,当请求访问/media/file.png,Nginx就会重定向到/home/app/web/mediafiles/中。
server { listen 80; location / { ... } location /media/ { alias /home/app/web/mediafiles/; }}
四、总结
本文介绍了Static files和Media files的定义和区别,并分别介绍了它们在生产和开发环境中简单配置方法,这里没有讲到的是文件存储相关设置,设置好后可以让网站从云或者CDN中访问静态文件或者Media文件,一般给网站加速用,感兴趣的可以自行搜索。
文章同步更新微信公众号:Django编程
标签: #nginx禁止访问png