程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

django使用media 上傳和修改頭像

編輯:Python

先說如何添加用戶時上傳頭像   我這裡上傳文件用的是element-ui裡的upload組件

1,首先在用戶表設置頭像字段

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)

2,Media配置

在settings粘上以下代碼

配置MEDIA_ROOT是為了自動生成文件

配置MEDIA_URL是為了讓客戶端直接訪問Media中的數據,類似於STATIC_URL

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

3,在一級路由urls.py下粘re_path這一段 並導入對應模塊即可

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})
]

4,然後你直接用orm的create方法他就會自動生成圖片

例:這裡的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到這裡就結束了!!希望對大家有幫助!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved