文件上传
在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
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'index',
]
配置路由
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),
]
使用官方推荐路径方法
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/files')
index/views.py 处理函数
from django.shortcuts import render
import os
from django.http import HttpResponse
from django.conf import settings
def upload_view(request):
if request.method == "GET":
return render(request, 'index/upload.html', locals())
elif request.method == "POST":
a_file = request.FILES["myfile"]
filename = os.path.join(settings.MEDIA_ROOT, a_file.name)
with open(filename, 'wb') as f:
data = a_file.file.read()
f.write(data)
return HttpResponse("file:" + a_file.name + " Uploaded successfully !")
上传界面
上传文件
上传成功
完成