龙空技术网

Django使用Static静态文件以及Media文件

太古星空 109

前言:

此时各位老铁们对“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