使用Django上传文件
几乎参考了下一页。
文件上传
我将在 proj01 项目中创建一个名为 file_upload 的应用程序。
创建一个名为”file_upload”的应用程序。
python manage.py startapp file_upload
2) 编辑proj01/settings.py
(省略)
INSTALLED_APPS = [
'file_upload',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
(省略)
3) 编辑 proj01/urls.py
from django.contrib import admin
from django.urls import path
from django.urls import include
import file_upload.views as file_upload
urlpatterns = [
path('success/url/',file_upload.success),
path('file_upload/',include('file_upload.urls')),
path('admin/', admin.site.urls),
]
创建模板
mkdir file_upload/templates
mkdir file_upload/templates/file_upload
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" />
<title>ファイルアップロード</title>
</head>
<body>
<h1>ファイルをアップロード</h1>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">アップロード</button>
</form>
<hr />
Dec/26/2018<p />
</body>
</html>
5) 创建file_upload/forms.py
from django import forms
class UploadFileForm(forms.Form):
title = forms.CharField(max_length=50)
file = forms.FileField()
6) 编辑 file_upload/views.py
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import UploadFileForm
from django.http import HttpResponse
import sys
# ------------------------------------------------------------------
def file_upload(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
sys.stderr.write("*** file_upload *** aaa ***\n")
handle_uploaded_file(request.FILES['file'])
file_obj = request.FILES['file']
sys.stderr.write(file_obj.name + "\n")
return HttpResponseRedirect('/success/url/')
else:
form = UploadFileForm()
return render(request, 'file_upload/upload.html', {'form': form})
#
#
# ------------------------------------------------------------------
def handle_uploaded_file(file_obj):
sys.stderr.write("*** handle_uploaded_file *** aaa ***\n")
sys.stderr.write(file_obj.name + "\n")
file_path = 'media/documents/' + file_obj.name
sys.stderr.write(file_path + "\n")
with open(file_path, 'wb+') as destination:
for chunk in file_obj.chunks():
sys.stderr.write("*** handle_uploaded_file *** ccc ***\n")
destination.write(chunk)
sys.stderr.write("*** handle_uploaded_file *** eee ***\n")
#
# ------------------------------------------------------------------
def success(request):
str_out = "Success!<p />"
str_out += "成功<p />"
return HttpResponse(str_out)
# ------------------------------------------------------------------
7) 创建 file_upload/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.file_upload, name='file_upload'),
]
创建一个文件上传文件夹
mkdir media
mkdir media/documents
8) 移民
python manage.py migrate
9) 启动开发服务器
python manage.py runserver
9) 在浏览器中访问 http://127.0.0.1:8000/file_upload/。

选择文件并上传,将会被上传到media/documents/文件夹中。

代码在 GitHub 上。
ekzemplaro/django_file_upload
我已在下一个版本中进行确认。
$ python --version
Python 3.7.3
$ python -m django --version
3.2.9