Django之处理用户上传的文件

来源:互联网 发布:linux c 开发环境 编辑:程序博客网 时间:2024/05/16 11:19

上传的静态文件的处理(2)

用户上传的文件, 比如用户上传的头像照片, 那么上传到哪里, 另外,我们又是如何可以在浏览器上可以访问到这些资源呢,这里, 就需要django对用户上传的静态文件的处理方法了

1.设置MEDIA_UR和MEDIA_ROOT

先不管这两个变量是什么, 先设置了再解释在settings.py里面
# settings.pyMEDIA_URL = '/media/'MEDIA_ROOT = os.path.join(BASE_DIR, 'my_media')
好了,现在来解释这两个变量到底有什么用,首先, MEDIA_ROOT是用来存储上传的文件的绝对路径,比如,我的一个modle里面有一个文件类型的字端
# myapp.modelsclass myModel(models.Model):    img = models.ImageField(upload_to = '/myImage')
那么我创建一个对象时,里面的img字段存储的照片文件, 就在MEDIA_ROOT/myImage/ 文件夹下, 所以MEDIA_ROOT是设置上传的文件的目录的, 而具体安放的位置就是MEDIA_ROOT/upload_to设置的变量/ 文件夹下那么media_url是干什么的呢,和static_root一样, 是与浏览器有关的,比如,我要在浏览器上访问用户上传的照片, 如个人界面上要显示个人 头像, 那么浏览器是怎么访问到这个资源的呢, 首先,肯定不是在<img>标签里面的src写上照片所在的本地地址, 那么在url上面设置成什么,才能对应在服务器端拿到相应的静态文件呢那就需要MEDIA_URL来做映射了如果我在浏览器上输入字http://127.0.0.1:8000/media/文件的相对路径,那么实际在服务器端寻找资源的位置就是MEDIA_ROOT/文件的相对路径, 也就是  BASE_DIR/my_media/...

2.怎么才能让访问成功

如果按上面的设置配置好后,比如我的项目文件下, 有文件 my_media/myimage.png那么在浏览器上输入:http://127.0.0.1:8000/media/myimage.png结果是无法加载,page不存在为什么呢,因为没有设置url函数也就是我们要在urls.py设置这么一句才可以对浏览器输入的url进行匹配
from django.conf import settingsfrom django.conf.urls.static import staticurlpatterns = [    # other url()] + static(static(settings.MEDIA_URL,             document_root=settings.MEDIA_ROOT))

这样, 就可以访问 http://127.0.0.1:8000/media/myimage.png了

注意: 这种方法, 只能在settings.py

DEBUG = True

时才有效,也就是说,仅适用开发过程中, 线上环境是不能这么干的

可以看一篇文章博客链接

0 0
原创粉丝点击