django如何取用户上传的头像

  • 在用户信息管理的过程中,如果需要修改用户的头像就需要把用户上传的头像保存在数据库中,django 中可以对 form 定义为文件的时候自动对上传的文件进行保存的。

  • 针对这个特性,可以利用 form 定义一个文件类型的 image,把这个字段取出来实际就是内存中的文件:

  • 1、先定义一个 form 专门用来对上传文件的处理

class UploadImageForm(forms.ModelForm):
    class Meta:
        model = UserProfile   #继承UserProfile类   
        fields = ['image']    #对image字段进行form处理
  • 2、定义修改用户头像的view函数
class UploadImageView(LoginRequireMixin,View):
    """
    用户修改头像
    """
    def post(self, request):
        image_form = UploadImageForm(request.POST, request.FILES, instance= request.user)#这里不同的是第二个参数,之前只需要传request.POST,但对于文件来说还需要传文件的上传地址,这个参数很重要,
因为对于input和文件上传,文件是放在request的不同地方的,文件是存在request.FILES这个变量当中的,modelform是可以直接保存到数据库当中的,instance这个参数是实例化对象,传的是modelform类里面指定的UserProfile
对象即request.user
        if image_form.is_valid():  #判断image_form是否可以
            image_form.save()
            return HttpResponse("{'status':'success'}", content_type='application/json')
        else:
            return HttpResponse("{'status':'fail','msg':'添加出错'}", content_type='application/json')
<form class="clearfix" id="jsAvatarForm" enctype="multipart/form-data" autocomplete="off" method="post" action="{% url 'users:image_upload' %}" target='frameFile'>
    <label class="changearea" for="avatarUp">
        <span id="avatardiv" class="pic">
            <img width="100" height="100" class="js-img-show" id="avatarShow" src="{{ MEDIA_URL }}{{ request.user.image }}"/>
        </span>
        <span class="fl upload-inp-box" style="margin-left:70px;">
            <span class="button btn-green btn-w100" id="jsAvatarBtn">修改头像</span>
            <input type="file" />
        </span>
    </label>
    {% csrf_token %}
</form>
  • 3 、提交头像是通过form来的,form的这个字段 enctype=“multipart/form-data” 一定要是这个类型,这样才会把文件类型传递到我们的后台
    method="post" action="{% url 'users:image_upload' %}"这两个参数也要这么填
    <input type="file" name="image" id="avatarUp" class="js-img-up"/>这里的name必须是“image”,这里很重要。

转载自https://www.cnblogs.com/onlyhold/p/8320064.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值