django 上传文件夹_Django 上传文件

这篇博客介绍了如何使用Django模型和视图处理文件上传,特别是Excel文件,并将数据存储到数据库中。通过创建`FilesModel`和`ContentModel`来管理文件和内容,同时提供了一个上传表单`UploadFileForm`。上传文件后,会根据文件内容创建相应的`ContentModel`实例。当文件格式或数据错误时,会删除已上传的文件。
摘要由CSDN通过智能技术生成

Django上传文件

models.py

class FilesModel(models.Model):

""" 文件名称"""

# file = models.FileField(upload_to='demo_files/%Y/%m/%d/')

file = models.FileField(upload_to='demo_files/%Y/%m/%d/%H:%M:%S')

date = models.DateTimeField(auto_now=True)

name = models.CharField(max_length=30, blank=True, null=True)

class ContentModel(models.Model):

"""文件内容"""

filed_ids = models.CharField(max_length=20)

name = models.CharField(max_length=20)

sex = models.CharField(max_length=10)

age = models.CharField(max_length=20)

desc = models.CharField(max_length=200)

file = models.ForeignKey(FilesModel)

views.py

def handle_uploaded_file(file):

""" 读取excle 文件存入数据库"""

return excel_reader_dict(file=file)

def upload_file(request):

if request.method == 'POST':

form = UploadFileForm(request.POST, request.FILES)

if form.is_valid():

file = request.FILES['file']

time_str = now().strftime('/%Y/%m/%d/%H:%M:%S')

# path = '/Users/fiz/Desktop/my/demo_files'

path = '/home/my/demo_files'

path = path + time_str + '/' + file.name

print(path)

new_file = form.save()

# 名称是否重复

new_file.name = file.name

new_file.save()

try:

datas = handle_uploaded_file(path)

print(datas)

for data in datas:

ContentModel.objects.create(name=data.get('name'),

filed_ids=data.get('id'),

sex=data.get('sex'),

age=data.get('age'),

desc=data.get('desc'),

file=new_file

)

alert_message = True

print(alert_message)

return render(request, 'demo/upload.html',

{'form': form, 'succcess': alert_message})

except Exception or IndexError or ValueError as ex:

print(ex.args)

FilesModel.objects.filter(id=new_file.pk).delete()

return HttpResponse("文件或者数据格式不对,请查看后上传")

else:

form = UploadFileForm()

return render(request, 'demo/upload.html', {'form': form})

forms.py

# -*- coding:utf-8 -*-

""" Created by FizLin on 2017/07/31/-下午2:54

mail: https://github.com/Fiz1994

"""

from django.forms import ModelForm

from demo.models import FilesModel, CommentModel

class UploadFileForm(ModelForm):

class Meta:

model = FilesModel

fields = ('file',)

class CommentForm(ModelForm):

class Meta:

model = CommentModel

fields = '__all__'

urls.py

# -*- coding:utf-8 -*-

""" Created by FizLin on 2017/07/31/-下午2:58

mail: https://github.com/Fiz1994

"""

from django.conf.urls import url, static

from demo.views import upload_file, success, home, view_excle_web, comment, delete_data,delete_excle

from django.conf import settings

urlpatterns = [

url(r'/upload/$', upload_file, name='upload_file'),

url(r'/success/url/$', success, name='success'),

url(r'/home/$', home, name='home'),

url(r'/comment/$', comment, name='comment'),

url(r'/delete_data/$', delete_data, name='delete_data'),

url(r'/view_excle_web/(?P\d+)/$', view_excle_web, name='view_excle_web'),

url(r'/delete_excle/$', delete_excle, name='delete_excle'),

]

templeate

base.html

upload file test

{% block content %}{% endblock %}

home.html

{% extends 'demo/base.html' %}

{% block title %} home-upload file {% endblock %}

{% block content %}

{% csrf_token %}

查找


你已经上传过的文件

{% endfor %}

{% endblock %}

upload.html

{% extends 'demo/base.html' %}

{% block title %} upload file {% endblock %}

{% block content %}

{% if succcess %}

alert("上传成功,你可以返回首页查看");

{% endif %}

{% if error_info %}

alert({{ error_info }});

{% endif %}

请按照这个格式制作excel 文件进行测试,因为列数相当于数据库中的列名称,多余的会被扔掉

{% csrf_token %}

{{ form.as_p }}

Upload

{% endblock %}

具体的源码可以查看

results

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值