此篇文章關(guān)鍵闡述了Django提交wps表格格并將它們載入數(shù)據(jù)庫(kù)系統(tǒng),將文件傳送到網(wǎng)絡(luò)服務(wù)器特定途徑,其實(shí)不是很難,文中分三個(gè)環(huán)節(jié)來(lái)給大家詳解,需要的小伙伴可以參考一下
導(dǎo)言:
近期上級(jí)領(lǐng)導(dǎo)要統(tǒng)計(jì)技術(shù)單位在多個(gè)業(yè)務(wù)線投入的工時(shí)百分?jǐn)?shù),而jira現(xiàn)階段的Tempo軟件只有統(tǒng)計(jì)分析本人工時(shí)。于是便寫了個(gè)報(bào)表軟件,將jira中導(dǎo)出來(lái)本人的工時(shí)wps表格格導(dǎo)入數(shù)據(jù)庫(kù),在后面解決每個(gè)業(yè)務(wù)流程工時(shí)占有率。之后科學(xué)研究了jiri的API文本文檔,選擇放棄之前思路,立即調(diào)用jiraAPI建立模型,這些先不說(shuō)。這篇文章博客關(guān)鍵詳細(xì)介紹Django上傳圖片,隨后分析excel導(dǎo)入數(shù)據(jù)庫(kù)。
一、上傳文件:
將文件上傳到服務(wù)器指定路徑,其實(shí)很簡(jiǎn)單,一共有三個(gè)步驟:
1.配置setting.py
#文件上傳配置
UPLOAD_ROOT=os.path.join(BASE_DIR,'upload')
2.前端代碼如下,使用<form>表單提交,"/upload/"路由配置在urls中,這個(gè)就不再多說(shuō)了。
{%extends'base.html'%} {%block content%} <body> <form id="form"enctype="multipart/form-data"action="/upload/"method="post"> <p><input type="file"name="file"></p> <input type="submit"name="提交"> </form> </body> {%endblock%} 3.后端代碼如下,這段代碼可以上傳任意格式的文件,沒(méi)有校驗(yàn)文件類型。 csrf_exempt def upload(request): #根name取file的值 file=request.FILES.get('file') logger.log().info('uplaod:%s'%file) #創(chuàng)建upload文件夾 if not os.path.exists(settings.UPLOAD_ROOT): os.makedirs(settings.UPLOAD_ROOT) try: if file is None: return HttpResponse('請(qǐng)選擇要上傳的文件') #循環(huán)二進(jìn)制寫入 with open(settings.UPLOAD_ROOT+"/"+file.name,'wb')as f: for i in file.readlines(): f.write(i) except Exception as e: return HttpResponse(e) return HttpResponse('上傳成功')
二、解析excel導(dǎo)入數(shù)據(jù)庫(kù)
1.文件上傳結(jié)束后,接下來(lái)讀取剛上傳到服務(wù)器的excel表格,然后寫入數(shù)據(jù)庫(kù)。所以整個(gè)后端代碼是這樣的:
#將excel數(shù)據(jù)寫入mysql def wrdb(filename): #打開(kāi)上傳excel表格 readboot=xlrd.open_workbook(settings.UPLOAD_ROOT+"/"+filename) sheet=readboot.sheet_by_index(0) #獲取excel的行和列 nrows=sheet.nrows ncols=sheet.ncols print(ncols,nrows) sql="insert into working_hours(jobnum,name,workingtime,category,project,date,createtime)VALUES" for i in range(1,nrows): row=sheet.row_values(i) jobnum=row[4] name=row[5] workingtime=row[2] category=row[8] project=row[1] date=xldate_as_datetime(row[3],0).strftime('%Y/%m/%d') values="('%s','%s','%s','%s','%s','%s','%s')"%(jobnum,name,workingtime,category,project,date,datetime.datetime.now()) sql=sql+values+"," #為了提高運(yùn)行效率,一次性把數(shù)據(jù)insert進(jìn)數(shù)據(jù)庫(kù) sql=sql[:-1] #寫入數(shù)據(jù)庫(kù) #DataConnection是自定義的公共模塊,用的是第三方庫(kù),用來(lái)操作數(shù)據(jù)庫(kù)。沒(méi)有用ORM,后續(xù)有g(shù)roup by等復(fù)雜sql不好操作。 DataConnection.MysqlConnection().insert('work',sql) csrf_exempt def upload(request): #根name取file的值 file=request.FILES.get('file') print('uplaod:%s'%file) #創(chuàng)建upload文件夾 if not os.path.exists(settings.UPLOAD_ROOT): os.makedirs(settings.UPLOAD_ROOT) try: if file is None: return HttpResponse('請(qǐng)選擇要上傳的文件') #循環(huán)二進(jìn)制寫入 with open(settings.UPLOAD_ROOT+"/"+file.name,'wb')as f: for i in file.readlines(): f.write(i) #寫入mysql wrdb(file.name) except Exception as e: return HttpResponse(e) return HttpResponse('導(dǎo)入成功')
2.數(shù)據(jù)導(dǎo)入后,通過(guò)一些處理就得到了我們想要的數(shù)據(jù)。報(bào)表其中之一的餅圖:
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)?lái)幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/128702.html
摘要:將開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境的差異降至最低,并使用持續(xù)交付實(shí)施敏捷開(kāi)發(fā)。可以在工具架構(gòu)和開(kāi)發(fā)流程不發(fā)生明顯變化的前提下實(shí)現(xiàn)擴(kuò)展。我們的初衷是分享在現(xiàn)代軟件開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)的一些系統(tǒng)性問(wèn)題,并加深對(duì)這些問(wèn)題的認(rèn)識(shí)。 簡(jiǎn)介 如今,軟件通常會(huì)作為一種服務(wù)來(lái)交付,它們被稱為網(wǎng)絡(luò)應(yīng)用程序,或軟件即服務(wù)(SaaS)。12-Factor 為構(gòu)建如下的 SaaS 應(yīng)用提供了方法論: 使用標(biāo)準(zhǔn)化流程自動(dòng)配置,從...
摘要:必備工具箱威航軟件園溫馨提示由于先天不支持插件撤銷事項(xiàng),所以必備工具箱的任何操作都不可以撤銷,但是在中就可以任意撤銷,此外大家還可以通過(guò)這款強(qiáng)大的插件工具箱對(duì)煩人的熱點(diǎn)彈窗功能予以徹底屏蔽哦。 ? ? ? ? ? ??EXCEL必備工具箱是一款大部分功能免費(fèi)且齊全可還能同時(shí)支持微軟EXCEL...
摘要:思路用現(xiàn)有的導(dǎo)出的插件,無(wú)法實(shí)現(xiàn),所以只能手寫各種樣式代碼關(guān)于打印頁(yè)腳之類無(wú)從下手的要求,需要導(dǎo)出后,復(fù)制一份,原文件拖進(jìn),查看源碼,復(fù)制的那份用打開(kāi),設(shè)置打印頁(yè)腳。 背景 前段時(shí)間因一個(gè)需求后端無(wú)法完成,所以交給前端來(lái)實(shí)現(xiàn),導(dǎo)出表格,需要實(shí)現(xiàn):1、支持多個(gè)sheet,并且有自己的name2、根據(jù)要求合并單元格,設(shè)置單元格的寬高3、在表格內(nèi)有各自的二維碼4、打印的頁(yè)邊距為左右各0.5c...
摘要:主要通過(guò)樣式為其賦予不同的表現(xiàn)標(biāo)簽用來(lái)定義內(nèi)聯(lián)行內(nèi)元素,并無(wú)實(shí)際的意義。html文檔結(jié)構(gòu) 1 DOCTYPE html> 2 <html lang="zh-CN"> #這個(gè)lang表示語(yǔ)言,zh-CN中文的意思,整個(gè)文檔的內(nèi)容以中文為主,如果以英文為主,就寫成lang=en 3 4 <head> 5 <meta charset...
摘要:在這些罕見(jiàn)的情況下,解析器必須重新啟動(dòng),丟棄之前解碼的內(nèi)容。標(biāo)簽包含解析器必須收集的文本,然后發(fā)送到腳本引擎進(jìn)行評(píng)估。如果文件內(nèi)調(diào)用了,解析器將重新開(kāi)始解析過(guò)程。事件當(dāng)解析器完成時(shí),它通過(guò)一個(gè)名為的事件宣布完成。 瀏覽器基本的工作流程 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 進(jìn)入主話題之前,先羅列一下瀏覽器的主要構(gòu)成: 用戶界面- 包括地址欄、后退/前進(jìn)...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02