django文件上传总结

[复制链接]
查看: 1853   回复: 0

307

主题

307

帖子

1718

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1718
2024-2-24 23:23:34   显示全部楼层   阅读模式  
通用封面.jpg


1.文件上传得 主要就是弄个表单吧上传你得东西从前端往后端抛
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>静态文件</title>
    {% load static %}
{#    <link rel="stylesheet" href="/static/index.css">#}
    <link rel="stylesheet" href="{% static 'index.css' %}">
</head>
<body>
<h1>文件上传</h1>
<a href="{% url 'app1:show' %}">前往上传图片列表</a>
<hr>
<form action="#" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <p>用户名:<input type="text" name="uname"> </p>
    <p>头像:<input type="file" name="icon"></p>
    <p><button>上传图片</button></p>
</form>

</body>
</html>

2.view.py写上传你文件得处理方案
import os
import uuid

from django.http import HttpResponse
from django.shortcuts import render
from django.conf import settings
from app1.models import *


# Create your views here.
def test(request):
    return HttpResponse("app1测试")


# 静态文件使用
def index(request):
    return render(request, 'index1.html')


def upload(request):
    if request.method == 'GET':
        return render(request, 'index1.html')
    elif request.method == 'POST':
        # 实现单文件上传
        uname = request.POST.get('uname')
        icon = request.FILES.get('icon')  # 单个文件
        # print(uname, icon)  # 打 1.png

        # 1.将传得图片存到服务器媒体文件夹中配置seting
        # 2.将该媒体文件得路径存入到数据库汇总

        # 保存文件到MEDIA_ROOT指定的目录
        filename = get_uuid_name() + icon.name[icon.name.rfind('.'):]  # 不要使用原图名称
        filePath = os.path.join(settings.MEDIA_ROOT, filename)
        print(filePath)
        # 分段写入文件
        with open(filePath, 'ab') as fp:
            for part in icon.chunks():  # 分段去内容
                fp.write(part)  # 写入内容
                fp.flush()  # 清空缓存

        # 讲媒体文件上传人的名字存进数据库
        print(uname)
        user = userIcon()
        user.name = uname
        user.icon = 'uploads/' + filename
        user.save()
        return render(request, 'index1.html')


# 通过uuid来得到位移得图片名称
def get_uuid_name():
    return str(uuid.uuid4().hex)


def show(request):
    user = userIcon.objects.get(name='谢凡')
    return render(request, 'show.html', {'user': user})

简单来说就是拿到文件,然后吧弄UUID技术生成一个唯一得图片名字再拼一个路径出来,然后往服务器里面写入存储
然后吧uuid得名字存到数据库方面后期调用显示

3.数据库mode.py文件设计
from django.db import models


# Create your models here.
class userIcon(models.Model):
    # 名字
    name = models.CharField(max_length=30, unique=True)
    # 头像
    icon = models.CharField(max_length=255)

    class Meta:
        db_table = 'tb_iCON'
4.上传图片展示html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户头像</title>
     {% load static %}
</head>
<body>
<h1>用户头像</h1>
<hr>
<p> 用户名字:{{ user.name }}</p>
<a href="{% url 'app1:index' %}">返回首页</a>
<hr>
<img src="{% static user.icon %}" width="200">

</body>
</html>

over
回复

使用道具 举报

您需要登录后才可以回帖   登录 立即注册

高级模式

南通谢凡软件科技有限公司