Django开发过程中,文件的上传和使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28057541/article/details/71104317

Django开发过程中,文件的上传和使用

官网关于文件存储的步骤

官网关于文件的管理

文件的上传

在model中使用FileFiledImageFiled,需要以下步骤:

  1. 在你的setting文件中,你需要定义MEDIA_ROOT,这是一个目录路径,作为你在Django中存储上传文件的地方。(为了性能,这些文件并不存储在数据库中)。你还需要定义MEDIA_URL作为这个目录的一个基本公开的url。你也要确保当前Web服务器的这个用于拥有这个目录的写入权利。
  2. 在你的model中定义FileFieldImageField,定义upload_to这个选项,来指定MEDIA_ROOT这个目录的一个子目录,来存储上传文件。
  3. 在你数据库中的保存的,是对应文件的路径(与MEDIA_ROOT有关),你肯定会愿意使用Django提供的url属性。比如你的ImageField叫做mug_shot,那么在你的模板文件中,你可以通过{{object.mug_shot.url}}来获取这个图片的绝对路径。

比如,你的MEDIA_ROOT设为/home/media,然后你的upload_to被设定为photos/%Y/%m/%d,%Y/%m/%d部分是一种格式化,%Y是4位年份,%m是2位月份,%d是2位天数。如果你在2007年1月15日上传了一个图片文件,那么它就会被存储在/home/media/2007/1/15/这个目录下。

注意: 因为文件对象是作为model的一部份数据库中存储的,所以在数据库保存之前,真实的文件名并不能依靠

注意2:对上传的文件类型,一定要有严格的把控,如果一个人上传了可执行的脚本文件,那么你的服务器的安全就受到了威胁

原文中还介绍了一些高级使用,比如:文件重命名,文件读写,自定义一个storage system来实现远程存储等,但是当前项目实现我还用不到,有兴趣的同学可以去看一下


图片文件的使用

settitng.py

MEDIA_ROOT = BASE_DIR + '/media/' # BASE_DIR 是项目所在的目录,这样文件就会存储在当前的开发目录下的一个`media`的文件夹下
MEDIA_URL = '/media/'

urls.py
注意:不是app中的urls文件,而是整个项目的urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^blog/', include('blog.urls'))
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
# 这是官方给出的在开发中显示图片的方式,但是只能用于本地开发的时候,也就是127.0.0.1的时候。而不能用在发布版本

此时你就可以在模板文件中引用相关的图片了

image是一个model,img是它的ImageField,url则是指向图片文件的url

<img src="{{image.img.url}}">

我在自己搭建的blog网站有使用到以上的技术,欢迎大家围观

猜你喜欢

转载自blog.csdn.net/qq_28057541/article/details/71104317