Django媒体文件URL的配置

Django媒体文件URL的配置,第1张

在Django中经常需要配置图片、视频等表态文件,在配置时较为复杂,这里纪录一下:

在文件尾部加入以下目录,用于存放上传的文件

在models中写上image字段其中 %Y 代表年, %m 代表月, blank=True 代表可以为空。当上传文件时,代表上传到image目录下,以当前年月子目录的文件夹中。

image = models.ImageField(upload_to="image/%Y/%m", blank=True)

其中src中的{{ MEDIA_URL }}会在模板中渲染为第一步中的 /media/

如果您想在模板中使用{{MEDIA_URL}},请在“模板”的“context_processors”选项中添加 django.template.context_processors.media 。

通过以上步骤,基本上可以在前端正常渲染出结果了,但还需要给图片添加一个URL以正常显示。

第一行为引入静态文件的serve,第二行为导入工程配置文件中的 MEDIA_ROOT

在url中加入:

如果您想开始写博客,又想使用功能强大的Web框架创建自己的博客,那么Django是您的最佳选择。目前该系列有14个教程,我仍在研究中,欢迎您给我更多的想法。

这些教程是:

为Django开发设置Vscode:在第一个视频中,您将学习如何在vscode文本编辑器上为Django建立开发环境。使用Django创建博客文章模型:该视频涵盖了为博客文章创建模型的所有细节,从标题,作者到标签。将富文本编辑器添加到Django项目:在这里,您将学习如何将富文本编辑器添加到表单或Django项目中的任何位置。

设计帖子页面:有关使用Bootstrap 4设计详细帖子页面的快速教程。

创建详细信息帖子类视图:您将学习如何为博客帖子创建基于类的视图,它将允许您在自定义帖子页面的管理页面上使用自定义链接显示我们在管理页面中创建的帖子。

跟踪您的Django网站的访问者数量:我们将看到如何跟踪博客文章的访问量/浏览量。我们将使用一个工具,让您知道多少访客在您看到时看到您的帖子。另外,您将能够知道他们的IP地址和他们使用的用户代理。

在Django中添加要发布的评论:在本视频中,您将看到如何在博客应用中添加评论模型。因此,读者可以向您发送评论,这将很容易执行和管理。此外,您还将看到如何将注释计数添加到视图文件。

设计博客页面-引导程序:您将设计博客页面,其中将列出博客文章和其他元素。

Django博客列表视图:在本视频中,您将看到如何在博客页面上显示博客文章,我们将介绍如何通过在帖子模型中添加另一个属性来访问每个帖子的链接。此外,您还将看到如何在边栏中显示热门帖子和帖子类别。

Django 3.1中的简单分页:此视频将仅介绍Django分页的下一个和上一个按钮。

Django搜索表单[带有Q对象的过滤器]:如何在Django博客网站中实现搜索功能

在Django中分页搜索结果:使用Bootstrap(CSS框架)创建简单的分页,然后将分页功能实现到Django搜索结果页面。

在详细信息帖子中添加类似的帖子小部件:将标记功能添加到我们的Django博客网站。

使用Django的简单用户身份验证系统:实现Django第三方应用程序,用户可以在其中注册,登录以及重设和更改密码。

随着网站运作,难免有些时候需要上传文件。上传文件自然是上传到网站所在的服务器,日积月累,慢慢地网站存储空间越来越少。而且网站迁移和备份都不方便,使用这些资源时也占用大量服务器流量。

较好的解决方案是使用第三方存储服务器,例如七牛、阿里云OSS、亚马逊S3等。将文件都放到这些存储服务器,可以减少服务器负担。服务器只剩下必要的静态文件和代码。

以阿里云OSS为例,讲解如何使用第三方存储服务器。(刚好最近用到这个,而且Django有其他人写好的第三方库)

首先,需要拥有OSS。这个去阿里云购买即可。购买之后可得到密钥等一系列信息。

接着,安装oss2库,该库是Python对应oss的 *** 作库。

再安装或下载Django OSS的Storage库。这些库是继承Django的Storage类,并重写相关方法。Django的Stroage是管理上传文件的存储。如何自定义Storage可参考Django官方文档。

执行如下命令,安装Django-Aliyun-OSS2-Storage:

也可以不用pip安装,打开该第三方库的Github,下载源码到本地。这里我需要修改部分代码,所以直接下载把整个包放到Django项目的根目录(也可其他位置)。

安装下载完成之后,配置Django的Settings,添加如下设置:

另外,还有两个对应参数需要注意一下,MEDIA_ROOT和MEDIA_URL。

MEDIA_ROOT是媒体文件的上传位置根目录,由于设置了BUCKET_NAME,一般在这个bucket中。可以设置为空字符串。

文件自然上传到Django模版的FileField字段设置的upload_to位置。

MEDIA_URL是获取媒体文件的链接前缀,可根据自己的oss文件链接位置添加。

由于上传的文件需要开放被用户下载,BUCKET_ACL_TYPE设置为公共的。若你的静态文件也需要上传到OSS中,设置如下:

设置无误后,重启Django即可使用。上传文件将自动上传到OSS中。

上面提到我要修改里面的源码。因为发现上传的文件在下载时的文件名是一串乱码,不是上传时的文件名。这个需要设置一些header信息,可参考OSS的SDK文档。该header需要在上传文件时就提交,而上面的django-aliyun-oss2-storage在上传文件时没有写入header信息。

打开该包的源码文件backends.py,找到AliyunBaseStorage类的_save方法。修改如下:

这样设置,点击文件链接,即可下载并且下载文件名是上传的文件名。若你不是什么类型文件都需要这么处理,可以判断filename的后缀名加以处理。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11341254.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存