上传头像功能及用户上传文件的保存
前端的文件上传功能
我们可以使用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}

浙公网安备 33010602011771号