Django实现文件上传

文件上传

在django 项目中创建一个应用

这里创建一个名为index的应用

  项目下终端执行
 python3 manage.py startapp index

在项目中创建当前目录下static/files 文件夹

    用于保存上传的文件
	mkdir -p static/files

在index下创建 templates/index/upload.html

upload.html 代码

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>上传文件</title>
</head>
<body>
<h3>上传文件</h3>
<div style="background: aqua">
    <form action="/upload" method="post"
          enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="myfile" style="color: brown">
        <input type="submit" value="开始上传">

    </form>
</div>

</body>
</html>

注册app

# 项目下/sitting.py中注册app
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'index', # 注册index应用
]

配置路由

# 项目下/项目文件/url.py
from django.contrib import admin
from django.conf.urls import url
from index import views as index_view
urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^upload', index_view.upload_view),
]

使用官方推荐路径方法

# 项目下/项目文件/sitting.py

# 把以下代码添加到py文件中,使用base_dir 计算出存储路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/files')

index/views.py 处理函数

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

# 导入sitting模块 ,使用静态文件路径
from django.conf import settings


# Create your views here.

def upload_view(request):
    if request.method == "GET":
        return render(request, 'index/upload.html', locals())
    elif request.method == "POST":
        # 此时可以通过request.FILES来获取上传文件
        a_file = request.FILES["myfile"]
        # 此处保存上传文件当前文件夹下 static/files 文件夹内
        # 得到要保存的文件的路径 在sitting中设置
        filename = os.path.join(settings.MEDIA_ROOT, a_file.name)
        with open(filename, 'wb') as f:
            # a_file.file 绑定一个已经打开的文件流对象
            data = a_file.file.read()
            f.write(data)
        return HttpResponse("file:" + a_file.name + " Uploaded successfully !")

上传界面

在这里插入图片描述

上传文件

在这里插入图片描述

上传成功在这里插入图片描述

完成在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值