Python tornado用40行代碼搭建數(shù)據(jù)庫(kù)交互網(wǎng)頁(yè)實(shí)現(xiàn)快速全棧開(kāi)發(fā)方式
Python tornado用40行代碼搭建數(shù)據(jù)庫(kù)交互網(wǎng)頁(yè)實(shí)現(xiàn)快速全棧開(kāi)發(fā)
作為數(shù)據(jù)分析師,我們大部分時(shí)間做的事情都是搭建線下Excel報(bào)表,這既有優(yōu)點(diǎn)也有缺點(diǎn)
優(yōu)點(diǎn)
- 開(kāi)發(fā)效率
快速建模,最快十分鐘就可以建模 - 數(shù)據(jù)傳播
便于傳播,發(fā)文件就是發(fā)模型 - 交互友好
對(duì)使用者門檻低,便于修改
缺點(diǎn)
- 版本控制
文件副本太多,極難做版本控制。經(jīng)常有人找我修改模型卻發(fā)現(xiàn)我已經(jīng)更新了,只是沒(méi)有給他最新版本 - 平臺(tái)限制
無(wú)法跨平臺(tái),Mac不能用,WPS不能用,Excel2010及以下版本不能用 - 靜態(tài)數(shù)據(jù)
更新數(shù)據(jù)有門檻,必須Windows系統(tǒng),需要Excel2013及以上版本,還需要數(shù)據(jù)庫(kù)賬號(hào)密碼,還需要IE9及以上瀏覽器,如果是早期Excel2016版本,還需要修改ReturnSingleDatabase
語(yǔ)句 - 數(shù)據(jù)量小
基本上一個(gè)Excel模型,在目前主流Windows電腦上存放1萬(wàn)數(shù)據(jù)就開(kāi)始卡,10萬(wàn)數(shù)據(jù)要刷新很久,100萬(wàn)基本上非i7不能刷新和使用了
基于以上這些問(wèn)題,我開(kāi)始轉(zhuǎn)向前端網(wǎng)頁(yè)開(kāi)發(fā),在研究了Flask
,Django
和Tornado
之后,選擇了簡(jiǎn)單快速的Tornado
,就是下面這個(gè):
快速開(kāi)發(fā)Python Web
1. 文件結(jié)構(gòu)
先準(zhǔn)備一個(gè)文件夾,例如取名python_web
,文件結(jié)構(gòu)如下
python_web |-- templates | |-- index.html |-- main.py
或者看截圖
2. index.html代碼
- index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <div> <form method='post' target='/'> <input type='date' title='開(kāi)始日期' name='begindate'> <input type='date' title='結(jié)束日期' name='enddate'> <input type='submit' title='點(diǎn)擊運(yùn)行' value='運(yùn)行'> </form> </div> <div> <table> <thead> <tr> {% for c in col %} <th>{{c}}</th> {% end %} </tr> </thead> <tbody> {% for i in data %} <tr> {% for x in i %} <td>{{x}}</td> {% end %} </tr> {% end %} </tbody> </table> </div> </body> </html>
35行代碼,很簡(jiǎn)單的一個(gè)網(wǎng)頁(yè)
- 3-5行,為了讓網(wǎng)頁(yè)支持中文
- 7-13行,條件設(shè)置部分
這里面有兩個(gè)要傳入py的變量,用name
屬性進(jìn)行了標(biāo)記,分別是變量begindate
,變量enddate
- 14-33行,表格數(shù)據(jù)部分
這里是根據(jù)上面的條件,傳入py數(shù)據(jù)的兩個(gè)變量,一個(gè)是表格標(biāo)題變量col
,一個(gè)是表格數(shù)據(jù)變量data
3. main.py代碼
- main.py
# -*- coding: utf-8 -*- import os.path import pymysql import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define,options define('port',default=1111,help='run on the given port',type=int) # 這里主要是定義端口 col = ['標(biāo)題1','標(biāo)題2','標(biāo)題3','標(biāo)題4'] # 傳入網(wǎng)頁(yè)的標(biāo)題列表 config = {'host':'123.123.123.123','user':'dan','passwd':'dan','port':3306,'db':'dan'} # 數(shù)據(jù)庫(kù)配置信息 class IndexHandler(tornado.web.RequestHandler): def get(self): # 進(jìn)入網(wǎng)頁(yè)時(shí)觸發(fā) self.render('index.html',col=col,data=(('',))) # 渲染網(wǎng)頁(yè),傳入?yún)?shù) def post(self): # 點(diǎn)擊按鈕時(shí)觸發(fā) begindate = self.get_argument('begindate') # 接收網(wǎng)頁(yè)傳來(lái)的參數(shù)1 enddate = self.get_argument('enddate') # 接收網(wǎng)頁(yè)傳來(lái)的參數(shù)2 # 下面是數(shù)據(jù)庫(kù)配置,連接,運(yùn)行,關(guān)閉 db = pymysql.connect(host=config['host'],user=config['user'],passwd=config['passwd'],port=config['port'],db=config['db']) cs = db.cursor() cs.execute("select * from dan where everyday between '%s' and '%s'" % (begindate,enddate)) data = cs.fetchall() cs.close() db.close() self.render('index.html',col=col,data=data) # 渲染網(wǎng)頁(yè),傳入?yún)?shù) if __name__=='__main__': tornado.options.parse_command_line() app = tornado.web.Application( handlers=[(r'/',IndexHandler)], # 將地址綁定到類 template_path=os.path.join(os.path.dirname(__file__),'templates')) # 指明網(wǎng)頁(yè)文件夾 http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
40行代碼,主要分兩部分
- IndexHandler
點(diǎn)擊網(wǎng)頁(yè)觸發(fā)get
或post
方法時(shí)調(diào)用該部分 - tornado
服務(wù)器配置,開(kāi)啟服務(wù)器
4. 參數(shù)傳遞流程圖
網(wǎng)頁(yè)跑起來(lái)是這樣的
選擇日期,點(diǎn)擊運(yùn)行,就會(huì)出數(shù)據(jù)。這操作比Excel切片器就簡(jiǎn)單多了,而且背后有海量的數(shù)據(jù)庫(kù)數(shù)據(jù)支撐,可以說(shuō)是海量數(shù)據(jù)了
至于ip,Windows需要進(jìn)入cmd輸入ipconfig
查看,Mac需要進(jìn)入Terminal輸入ifconfig
查看(Mac的真是難找??)
知識(shí)點(diǎn)
前后端 | 知識(shí)點(diǎn) |
---|---|
前端 | html |
后端 | python pymysql模塊 python tornado模塊 |
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用sqlalchemy實(shí)現(xiàn)連接數(shù)據(jù)庫(kù)的幫助類
這篇文章主要為大家詳細(xì)介紹了Python如何使用sqlalchemy實(shí)現(xiàn)連接數(shù)據(jù)庫(kù)的幫助類,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考下2024-02-02Python使用scrapy采集時(shí)偽裝成HTTP/1.1的方法
這篇文章主要介紹了Python使用scrapy采集時(shí)偽裝成HTTP/1.1的方法,實(shí)例分析了scrapy采集的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04python中Tkinter復(fù)選框Checkbutton是否被選中判斷
這篇文章主要介紹了python中Tkinter復(fù)選框Checkbutton是否被選中判斷方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01Python寫(xiě)的英文字符大小寫(xiě)轉(zhuǎn)換代碼示例
這篇文章主要介紹了Python寫(xiě)的英文字符大小寫(xiě)轉(zhuǎn)換代碼示例,本文例子相對(duì)簡(jiǎn)單,本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-03-03使用python批量修改文件名的方法(視頻合并時(shí))
這篇文章主要介紹了視頻合并時(shí)使用python批量修改文件名的方法,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08基于樹(shù)莓派的語(yǔ)音對(duì)話機(jī)器人
這篇文章主要為大家詳細(xì)介紹了基于樹(shù)莓派的語(yǔ)音對(duì)話機(jī)器人,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Python文件簡(jiǎn)單操作及openpyxl操作excel文件詳解
這篇文章主要為大家詳細(xì)介紹了python對(duì)文件的簡(jiǎn)單使用及openpyxl操作excel文件的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-10-10python詳解如何通過(guò)sshtunnel pymssql實(shí)現(xiàn)遠(yuǎn)程連接數(shù)據(jù)庫(kù)
為了安全起見(jiàn),很多公司服務(wù)器數(shù)據(jù)庫(kù)的訪問(wèn)多半是要做限制的,由專門的DBA管理,而且都是做的集群,數(shù)據(jù)庫(kù)只能內(nèi)網(wǎng)訪問(wèn),所以就有一個(gè)直接的問(wèn)題是,往往多數(shù)時(shí)候,在別的機(jī)器上(比如自己本地),是不能訪問(wèn)數(shù)據(jù)庫(kù)的,給日常開(kāi)發(fā)調(diào)試造成了很大不便2021-10-10