到目前为止我们的博客处理的都是文字。现代互联网早就进入了“读图”时代,图片的维护、展示也就相当重要。
上一章中预留了avatar字段,用来保存用户上传的头像,现在我们来实现这个功能。
必要的设置
图片属于一种媒体文件,它与静态文件类似,需要设置一个统一的目录,便于集中存储和访问。
这类需要框架统一设置的参数,当然应该在/my_blog/settings.py
中。在底部加上:
/my_blog/settings.py
...
# 媒体文件地址
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_ROOT和MEDIA_URL是用户上传文件保存、访问的位置:
-
在前面的
Profile
中我们设置了upload_to参数。有了这个参数,文件上传后将自动保存到项目根目录的media
文件夹中。os.path.join(MEDIA_ROOT, 'media/')
指定了media文件夹的位置。 -
MEDIA_URL代表用户通过URL来访问这个本地地址的URL。设置好这个参数后,用户就可以通过解析url,很方便的获取文件的地址。这样做的好处是避免的硬编码,让代码更容易维护。
Django框架擅长的是对逻辑的处理,而对图片这类文件的处理则非常的耗时。因此在实际的生产环境中(即产品上线之后),通常是有专门的Web服务器来处理文件的访问。
而在开发阶段我们不会在意效率问题,所以Django也提供了方法,让开发服务器能够处理图片。
在/my_blog/urls.py
添加下面的语句:
/my_blog/urls.py
...
# 新引入的模块
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...
]
#添加这行
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT