这一部分包括以下几个部分:media配置,前端html上传,数据库保存模块Model,表单验证Form,url配置,后端处理逻辑View
media配置
在setting.py
配置文件中添加:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
HTML设计
新建save_file_in_django.html
文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="myfile" multiple=""> {# 允许提交多个文件 #}
{# <input type="file" name="myfile"> 只能提交一个文件 #}
<input type="submit" value="提交">
{% csrf_token %}
</form>
</body>
</html>
Model编写
from django.db import models
class SaveFileInDjangoModel(models.Model):
save_file = models.FileField()
然后使用manage.py
生成数据表:
python manage.py makemigrations
python manage.py migrate
Form验证
如果当前app没有form.py
,需要新建一个这样的文件,并添加如下代码
from django import forms
class SaveFileInDjangoForm(forms.Form):
save_file = forms.FileField(required=True, max_length=255)
media URL配置
from django.views.static import serve
from new_pro.settings import MEDIA_ROOT
urlpatterns = [
path('admin/', admin.site.urls),
path(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),
]
View逻辑处理
url请自行配置,后台处理逻辑如下:
from django.views.generic import View
from .form import SaveFileInDjangoForm
from .models import SaveFileInDjangoModel
class SaveFileInDjangoView(View):
def get(self, request):
return render(request, 'save_file_in_django.html')
def post(self, request):
save_file_form = SaveFileInDjangoForm(request.POST, request.FILES)
if save_file_form.is_valid():
post_files = request.FILES.getlist('save_files')
for file in post_files:
save_file_model = SaveFileInDjangoModel()
save_file_model.save_files = file
save_file_model.save()
print(file.name)
return render(request, 'save_file_in_django.html')
然后运行后端,上传文件后即可实现完整的功能