先说如何添加用户时上传头像 我这里上传文件用的是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到这里就结束了!!希望对大家有帮助!