第9天:静态文件和媒体文件管理
目标
管理静态资源(如CSS、JavaScript、图片等)和用户上传的文件。
任务概览
- 配置静态文件和媒体文件的存储路径。
- 学习如何收集和压缩静态文件。
详细步骤
1. 配置静态文件和媒体文件的存储路径
在settings.py
中配置静态文件和媒体文件的路径。
# myproject/myproject/settings.py# 静态文件
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / "static", # 项目根目录下的static文件夹
]# 媒体文件
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 项目根目录下的media文件夹
确保在项目的根目录下创建static
和media
文件夹。
2. 使用静态文件
在模板中使用静态文件。
<!-- 使用静态文件 -->
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
<script src="{% static 'js/script.js' %}"></script>
在视图中或模板标签中使用静态文件。
# myproject/myapp/views.pyfrom django.contrib.staticfiles.storage import staticfiles_storagedef some_view(request):my_static_url = staticfiles_storage.url('images/my_image.png')# 使用 my_static_url 变量...
3. 使用媒体文件
用户上传的文件被视为媒体文件。在表单中处理文件上传。
# myproject/myapp/forms.pyclass UploadFileForm(forms.Form):file = forms.FileField()
在视图中处理文件上传。
# myproject/myapp/views.pydef upload_file(request):if request.method == 'POST':form = UploadFileForm(request.POST, request.FILES)if form.is_valid():# 处理上传的文件handle_uploaded_file(request.FILES['file'])return redirect('success_url')else:form = UploadFileForm()return render(request, 'upload.html', {'form': form})
4. 收集和压缩静态文件
使用collectstatic
命令收集静态文件到STATIC_ROOT
。
python manage.py collectstatic
在生产环境中,可以使用管道(pipeline)来压缩静态文件。
首先,在settings.py
中配置管道。
# myproject/myproject/settings.pySTATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
然后,安装whitenoise
。
pip install whitenoise
将WhiteNoise
中间件添加到MIDDLEWARE
配置中。
# myproject/myproject/settings.pyMIDDLEWARE = [# ...'whitenoise.middleware.WhiteNoiseMiddleware',# ...
]
学习要点
- 理解如何在Django中配置和管理静态文件和媒体文件。
- 学会如何在模板中使用静态文件。
- 掌握如何处理用户上传的媒体文件。
- 学习如何收集和压缩静态文件以优化加载速度。
每日回顾
- 确保静态文件和媒体文件的路径配置正确。
- 测试静态文件和媒体文件的使用是否正常。
通过今天的学习,你应该能够管理静态资源和用户上传的文件,并学会如何优化静态文件的使用。明天,我们将学习中间件和日志系统,这将帮助你更好地控制请求的处理流程和记录重要的信息。