上传头像功能及用户上传文件的保存

前端的文件上传功能

我们可以使用label标签将头像包起来,将label的for属性只想上传头像的input标签,然后把input标签隐藏,

当我们点击头像时会弹出文件选择框

<label for="avatar">头像
    <img id="avatar_img" src="#" alt="" width="60" height="60">
</label>

另外还要使用户选择完图片后将图片显示在头像的位置

// input框id为avatar,头像img标签id为avatar_img
$("#avatar").change(function () {
        // input标签中的文件对象
         var choose_file=$(this)[0].files[0];
         var reader=new FileReader();  // 阅读器
         reader.readAsDataURL(choose_file);  // 读取文件对象的url
        // 阅读器对象读取完毕后,更改图片的url地址
         reader.onload=function () {
            $("#avatar_img").attr("src",this.result)
        }
    });

input中的文件对象

用户上传文件的存储

存储文件的模型属性

class UserInfo(AbstractUser):
   ...
    avatar = models.FileField(upload_to = 'avatars/',default="/avatar/default.png")
    ...
# 数据库中的文件字段上实际上只存了文件的地址
# upload_to 是文件保存的位置,default是默认只用的头像

# 用户上传文件的默认保存位置是在项目目录下
MEDIA_ROOT=os.path.join(BASE_DIR,"blog","media")
# 该配置修改文件的保存目录

# 另外用户上传的文件也应像静态文件一样可以被客户端访问
MEDIA_URL="/media/"
# MEDIA_URL的值就代表了MEDIA_ROOT的文件目录,在浏览器可以向访问静态文件一样来访问用户上传文件

视图中保存文件

avatar_obj=request.FILES.get("avatar") # 图片对象     
user_obj=UserInfo.objects.create_user(username=user,password=pwd,email=email,avatar=avatar_obj)
# Django模型会将文件存储在对应的位置,并在数据库中存储文件的地址

模板中使用上传的图片

# 数据库中存储的是文件的路径,所以我们直接拼成一个url就可以了
<img width="70" height="70" src="/media/{{ 数据库中的url }}" alt=""></p>

 配置文件中的url也要配置

from django.views.static import serve
setting是项目的配置文件
url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}

  

posted @ 2018-02-06 16:38  瓜田月夜  阅读(984)  评论(0)    收藏  举报