网站建设 苏州,网站建设人员需求分析,清河网站建设电话,如何开设一个网站专栏系列#xff1a;Django学习教程 导入文件
目标#xff1a;导入部门清单excel#xff0c;解析excel数据存储到数据库。
1.准备要导入的excel文件 2.编写模板HTML div classpanel panel-default!-- Default panel contents --div class…专栏系列Django学习教程 导入文件
目标导入部门清单excel解析excel数据存储到数据库。
1.准备要导入的excel文件 2.编写模板HTML div classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span批量上传/divdiv classpanel-bodyform methodpost enctypemultipart/form-data action/dept/multi/{% csrf_token %}div classform-groupinput typefile nameexc/divinput typesubmit value上传 classbtn btn-info btn-sm/form/div/div
3.编写模型
from django.db import modelsclass Department(models.Model):name models.CharField(verbose_name部门名称, max_length32)def __str__(self):return self.name
4. 编写视图函数
导入逻辑
1.根据标签input typefile nameexc定义的 name 获取文件对象
2.对象传递给openpyxl由openpyxl读取文件的内容。from openpyxl import load_workbook解析excel库。
3.根据sheet遍历循环获取每一行数据
4.入库
def dept_multi(request): 批量删除Excel文件from openpyxl import load_workbook# 1.获取用户上传的文件对象file_object request.FILES.get(exc)# 2.对象传递给openpyxl由openpyxl读取文件的内容wb load_workbook(file_object)sheet wb.worksheets[0]# 3.循环获取每一行数据for row in sheet.iter_rows(min_row2):text row[0].valueexists models.Department.objects.filter(nametext).exists()if not exists:models.Department.objects.create(nametext)return redirect(/dept/list/)
5.配置路由
在 settings.py中添加
urlpatterns [path(dept/multi/, dept.dept_multi),] 6.系统演示 上传图片 以城市列表功能模块实战为例演示上传图片和查询图片。
1.启用Media
启用media是可以让文件自动保存到我们配置的位置。 在urls.py中进行配置
from django.urls import path, re_path
from django.views.static import serve
from django.conf import settings
urlpatterns [re_path(r^media/(?Ppath.*)$, serve, {document_root: settings.MEDIA_ROOT}, namemedia),
]
在settings.py中进行配置
import osMEDIA_ROOT os.path.join(BASE_DIR, media)
MEDIA_URL /media/
2.编写模板HTML city_list.html {% extends layout.html %}{% block content %}div classcontainerdiv stylemargin-bottom: 10pxa classbtn btn-success href/city/add/span classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建城市/a/divdiv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span城市列表/div!-- Table --table classtable table-borderedtheadtrthID/ththLogo/thth名称/thth人口/th/tr/theadtbody{% for obj in queryset %}trth{{ obj.id }}/thtdimg src/media/{{ obj.img }} styleheight: 80px;/tdtd{{ obj.name }}/tdtd{{ obj.count }}/td/tr{% endfor %}/tbody/table/div/div
{% endblock %}upload_form.html {% extends layout.html %}{% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title {{ title }} /h3/divdiv classpanel-bodyform methodpost enctypemultipart/form-data novalidate {% csrf_token %}{% for field in form %}div classform-grouplabel{{ field.label }}/label{{ field }}span stylecolor: red;{{ field.errors.0 }}/span/div{% endfor %}button typesubmit classbtn btn-primary提 交/button/form/div/div/div{% endblock %}3.编写模型
from django.db import modelsclass City(models.Model): 城市 name models.CharField(verbose_name名称, max_length32)count models.IntegerField(verbose_name人口)# 本质上数据库也是CharField自动保存数据。img models.FileField(verbose_nameLogo, max_length128, upload_tocity/)注意编写模型后执行如下命令初始化表结构 $ python manage.py makemigrations $ python manage.py migrate 4.编写视图函数
city_list函数这里非常简单直接使用models库查询出所有所有城市然后返回到给模板。
UpModelForm定义一个上传表单用于渲染模板页面。
city_add函数
1.如果是GET请求将form表单样式返回给模板。
2.如果是POST请求1.将文件保存到启用的media的位置2.将数据写入DB3.转发给查询city_list查询最新数据并返回到模板。
from django.shortcuts import render, redirect
from ums import models
from ums.utils.bootstrap import BootstrapModelFormdef city_list(request):queryset models.City.objects.all()return render(request, city_list.html, {queryset: queryset})class UpModelForm(BootstrapModelForm):# img排除input样式bootstrap_exclude_fields [img]class Meta:model models.Cityfields __all__def city_add(request):title 新建城市if request.method GET:form UpModelForm()return render(request, upload_form.html, {form: form, title: title})form UpModelForm(datarequest.POST, filesrequest.FILES)if form.is_valid():# 对于文件自动保存# 字段 上传路径写入到数据库form.save()return redirect(/city/list/)return render(request, upload_form.html, {form: form, title: title})5.配置路由
from django.urls import path, re_path
from django.views.static import serve
from django.conf import settings
from ums.views import cityurlpatterns [re_path(r^media/(?Ppath.*)$, serve, {document_root: settings.MEDIA_ROOT}, namemedia),# 城市列表path(city/list/, city.city_list),path(city/add/, city.city_add),]
6.系统演示
新增城市 城市列表查询 如果需要完整代码可以评论区给我留言
如果本文对你有帮助记得点赞关注你的支持是我最大的动力