django实现上传文件并保存

这一部分包括以下几个部分: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')

然后运行后端,上传文件后即可实现完整的功能

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值