首页 > 编程语言 > 详细

Python的Django实现文件上传、下载

时间:2021-05-06 23:43:03      阅读:30      评论:0      收藏:0      [点我收藏+]

Django实现文件上传

1. 配置setting文件

1.1. 在setting里面配置文件上传路径,在setting末尾添加

 

#指定上传文件的存储相对路径(读取文件)
MEDIA_URL = /media/
#上传文件存储路径(存储路径)
MEDIA_ROOT = os.path.join(BASE_DIR,media)

1.2. 在项目根目录新建media文件夹
1.3. 配置TEMPLATES,添加如下内容

django.template.context_processors.media

添加完如下所示

TEMPLATES = [
    {
        BACKEND: django.template.backends.django.DjangoTemplates,
        DIRS: [os.path.join(BASE_DIR, templates)]
        ,
        APP_DIRS: True,
        OPTIONS: {
            context_processors: [
                django.template.context_processors.debug,
                django.template.context_processors.request,
                django.contrib.auth.context_processors.auth,
                django.contrib.messages.context_processors.messages,
                django.template.context_processors.media
            ],
        },
    },
]

2. 配置父路由urls

2.1. 将父路由映射到子路由的路径

urlpatterns = [
    path(admin/, admin.site.urls),
    path(student/, include(stu.urls))
]

2.2. 配置通过数据加载加载图片

from django.views.static import serve
from .settings import MEDIA_ROOT, DEBUG

if DEBUG:
    urlpatterns += url(r^media/(?P<path>.*)/$, serve, {document_root: MEDIA_ROOT}),

3. 配置子路由urls

urlpatterns = [
    url(r^$, views.index_view),
    url(r^upload/, views.upload_view),
    url(r^showall/, views.showall_view)
]

4. 构建模型数据库类models

class Student(models.Model):
    sno = models.AutoField(primary_key=True)
    sname = models.CharField(max_length=30)
    photo = models.ImageField(upload_to=imgs)

    def __str__(self):
        return uStudent:{}.format(self.sname)

5.视图逻辑处理views

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.
from stu.models import Student


def index_view(request):
    if request.method == GET:
        return render(request, index.html)
    else:
        return HttpResponse(页面有误!)


def upload_view(request):
    uname=request.POST.get(uname,‘‘)
    photo=request.FILES.get(photo,‘‘)
    Student.objects.create(sname=uname,photo=photo)

    return HttpResponse(上传成功)


def showall_view(request):
    student=Student.objects.all()

    return render(request,showall.html,{student:student})

6.前端页面

6.1. index.html

<form action="/student/upload/" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <p>
            <label for="ua">姓名:</label>
            <input type="text" name="uname" id="ua">
        </p>
        <p>
            <label for="ph">头像:</label>
            <input type="file" name="photo" id="ph">
        </p>
        <p>
            &emsp;&emsp;&emsp;&emsp;<input type="submit" value="注册">
        </p>
    </form>

6.2. showall.html

<table width="500px" border="1" cellspacing="0">
    <tr>
        <th>学号</th>
        <th>姓名</th>
        <th>照片</th>
        <th>操作</th>
    </tr>
    {% for foo in student %}
    <tr>
        <td>{{ forloop.counter}}</td>
        <td>{{foo.sname}}</td>
        <td><img src="{{MEDIA_URL}}{{ foo.photo }}" style="width: 200px;"></img></td>
        <td>下载</td>
    </tr>
    {% endfor %}
</table>

Django文件下载

def download_view(request):
    photo = request.GET.get(photo, ‘‘)
    filename = photo[photo.rindex(/) + 1:]
    system_path = os.getcwd()
    print(photo)
    path = os.path.join(system_path, photo[1:].replace(/, \\))
    print(path)
    with open(path, rb) as fr:
        reponse = HttpResponse(fr.read())
        reponse[Content-Type] = image/png

        reponse[Content-Disposition] = attachment;filename= + filename

    return reponse

 

Python的Django实现文件上传、下载

原文:https://www.cnblogs.com/djwww/p/14736270.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!