django使用media 上传和修改头像

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

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z_Xshan

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值