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 %}
查找
你已经上传过的文件
{% for file in files %}
{# {{ file.name }}-上传时间 {{ file.date|date:'Y-m-d G:i:s' }}#}
{% 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