Django笔记(Django上传头像)

1.写一个对应的model (TmageField)

实例:

from django.contrib.auth.models import AbstractUser
from django.db import models

# Create your models here.

class MyUser(AbstractUser):
    phone = models.CharField(
        max_length=13,
        verbose_name="手机号",
        unique=True
    )
    icon = models.ImageField(
        upload_to="icons",
        null= True,
    )

2.前端:

注意:from表单上传文件需要添加  enctype='multipart/form-data'    method=‘post’ 属性 至少要有一个类型是file的input标签

实例:




    
    Title
    


欢迎{{ u_name }}

3.后端

1.在static文件夹下创建一个uploadefiles的文件夹,用来存储接收上传的文件

2.在settings.py中配置

# 设置文件保存路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/uploads')
# 配置查找静态文件路径
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

3.生成图片的随机名称,需要在项目APP下创建一个my_utils.py ,把随机数的工具函数写在里面

import uuid
import hashlib

def get_random_str():
    #获取uuid的随机数
    uuid_val = uuid.uuid4()
    #获取uuid的随机数字符串
    uuid_str = str(uuid_val).encode('utf-8')
    #获取md5实例
    md5 = hashlib.md5()
    #拿取uuid的md5摘要
    md5.update(uuid_str)
    #返回固定长度的字符串
    return md5.hexdigest()

4.拿文件,给对象赋值

@login_required(login_url="/dj05app/my_login")
def update_msg(req):
    user = req.user
    print(user.icon)
    if req.method == "GET":
        data = {
            'u_name': user.username
            #拿头像文件路径
            'icon': '/static/uploads/icons/hehe.jpg'
        }
        return render(req, 'person.html', data)
    
    else:
        #拿文件数据
        icon = req.FILES['u_icon']
        #获取图片的随机名
        file_name = 'icons/' + get_rabdom_str() + '.jpg'
        #拼接一个自己的文件路径
        image_path = os.path.join(settings.MEDIA_ROOT, file_name)
        #打开拼接的文件路径
        with open(image_path, 'wb')as fp:
            #遍历图片的块数据(切块的传图片)
            for i in icon.chunks():
                #将图片数据写入自己的那个文件
                fp.write(i)
        #拼接返回数据
        data = {
            'u_name': user.username
            #拿头像文件路径
            'icon': '/static/uploads/' + file_name
        }
        print(user.icon)
        return render(req, 'person.html', data)
        
        

 

你可能感兴趣的:(Django)