先說如何添加用戶時上傳頭像 我這裡上傳文件用的是element-ui裡的upload組件
class User(models.Model):
'''用戶表'''
email=models.CharField(max_length=255,unique=True)
password=models.CharField(max_length=255)
intorduction=models.CharField('個人簡介',max_length=255,null=True)
phone=models.CharField('手機號',max_length=255,null=True)
#加上head_img這個字段用來保存頭像
head_img=models.FileField('頭像',null=True,max_length=255)
role_id=models.ManyToManyField(Role)
在settings粘上以下代碼
配置MEDIA_ROOT是為了自動生成文件
配置MEDIA_URL是為了讓客戶端直接訪問Media中的數據,類似於STATIC_URL
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
from django.contrib import admin
from django.urls import path, re_path,include
from django.views.static import serve
from django_mianshibaodian import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('RBACapp.urls')),
# 主要以media開頭,後面寫什麼都行
re_path(r'media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT})
]
例:這裡的head_img就是你傳的圖片 其他寫你對應的數據即可
class putHeadImg(View):
def post(self,res):
file = res.FILES.get("file")
User.objects.create(email='email',head_img=file,password=123)
return JsonResponse({'message':'修改頭像!'})
我們就可以直接通過ip+media+圖片name即可
例:
這裡說修改文件 發現這個生成文件只能在create方法才能生成修改的話就不會自動生成圖片了,所以我就用了open方法去寫入圖片
這裡我遇到了一個問題 upload傳過來的數據不只是圖片的二進制還有文件名一些別的東西處理的話沒有想到好的方法
然後我竟然發現file = res.FILES.get("file") 這個不只是文件名!!!!!
我們可以用file.file.read()可以獲取對應的圖片的二進制我們直接保存就行
class putHeadImg(View):
def post(self,res):
file = res.FILES.get("file")
f=open('./media/'+username+'.jpg','wb+')
f.write(file.file.read())
f.close()
return JsonResponse({'message':'修改頭像!'})
我用的用戶名存儲的圖片修改完之後會被替換掉 OK到這裡就結束了!!希望對大家有幫助!