Python的Django框架上传文件或图片教程

 文件上传的关键代码在第三点,如何把文件读取到指定的路径

一、创建静态文件夹

在项目路径下创建static文件夹,再在static里面创建upload文件夹

二、设置配置文件

settings.py配置文件中设置路径

STATICFILES_DIRS = [ BASE_DIR / 'static/' ]

UPLOAD_URL = BASE_DIR / 'static/upload'

 

三、 实现上传文件的代码

1.在templates中创建upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传图片</title>
</head>
<body>
    <h2>上传图片</h2>
    <hr>
    <form method="post" action="" enctype="multipart/form-data">
        {% csrf_token %}
        <p>用户名:<input type="text" name="username"></p>
        <p>头像:<input type="file" name="icon"></p>
        <p><button>提交</button></p>
    </form>

</body>
</html>

2.创建视图函数方法

将文件读取到指定的路径,将路径存储到数据库

def upload1(request):
    if request.method == 'GET':
        return render(request, 'upload.html')

    elif request.method == 'POST':
        uname = request.POST.get('uname')
        icon = request.FILES.get('icon')  # 接受上传的文件
        # print(icon, type(icon))  # 文件对象
        # picture1.jpg    <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
        # print(icon.name)  # 文件名"picture1.jpg"

        # 1. 将上传的图片存储到后台对应的媒体文件中
        # file_name = icon.name  # 尽量不使用原图名称
        # 获取源文件的后缀名,即文件类型(.jpg)
        # file_name = gen_uuid_name() + icon.name[icon.name.rfind('.'):]  # .jpg
        file_name = gen_uuid_name() + os.path.splitext(icon.name)[-1]  # .jpg
        # 将文件名和路径合并
        file_path = os.path.join(settings.MEDIA_ROOT, file_name)

        # 分端写入文件,其中‘ab’是读取文件模式--ab':以二进制追加模式打开文件,用于在二进制文件末尾追加数据。
        with open(file_path, 'ab') as fp:
            for part in icon.chunks():
                fp.write(part)
                fp.flush()  # 清空缓存

        # 2. 将该媒体文件的路径,存入到数据库中
        user = UserModel()
        user.name = uname
        user.icon = 'uploads/' + file_name
        user.save()

       return redirect(reverse('showUser', kwargs={'userid': user.id}))

四、回显图片

html和视图函数

<head>
    <meta charset="UTF-8">
    <title>用户详情</title>
</head>
<body>
    <h2>用户详情</h2>
    <hr>
    {% load static %}
    <p>用户姓名:{{ user.username }}</p>
    <p>用户头像:<img src="{% static user.icon %}" width="200px"></p>
</body>
</html>
def showUser(request, userid):
    user = User.objects.filter(id=userid).first()
    return render(request, 'showUser.html', {'user': user})

 其中html有用到静态文件的相关知识,可以查看这篇文章
Python的Django框架静态文件使用,html引用css、js等文件-CSDN博客

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值