1. 程式人生 > >django如何取用戶上傳的頭像

django如何取用戶上傳的頭像

def media csrf 之前 span profile fix 取出 實例化

在用戶信息管理的過程中,如果需要修改用戶的頭像就需要把用戶上傳的頭像保存在數據庫中,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" name="image" id="avatarUp" class="js-img-up"/>
</span>
</label>
{% csrf_token %}
</form>
提交頭像是通過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”,這裏很重要。



django如何取用戶上傳的頭像