Python tornado用40行代碼搭建數(shù)據(jù)庫交互網(wǎng)頁實現(xiàn)快速全棧開發(fā)

作為數(shù)據(jù)分析師,我們大部分時間做的事情都是搭建線下Excel報表,這既有優(yōu)點也有缺點

優(yōu)點是:

  • 開發(fā)效率
    快速建模,最快十分鐘就可以建模
  • 數(shù)據(jù)傳播
    便于傳播,發(fā)文件就是發(fā)模型
  • 交互友好
    對使用者門檻低,便于修改

缺點也有:

  • 版本控制
    文件副本太多,極難做版本控制.經(jīng)常有人找我修改模型卻發(fā)現(xiàn)我已經(jīng)更新了,只是沒有給他最新版本
  • 平臺限制
    無法跨平臺,Mac不能用,WPS不能用,Excel2010及以下版本不能用
  • 靜態(tài)數(shù)據(jù)
    更新數(shù)據(jù)有門檻,必須Windows系統(tǒng),需要Excel2013及以上版本,還需要數(shù)據(jù)庫賬號密碼,還需要IE9及以上瀏覽器,如果是早期Excel2016版本,還需要修改ReturnSingleDatabase語句
  • 數(shù)據(jù)量小
    基本上一個Excel模型,在目前主流Windows電腦上存放1萬數(shù)據(jù)就開始卡,10萬數(shù)據(jù)要刷新很久,100萬基本上非i7不能刷新和使用了

基于以上這些問題,我開始轉(zhuǎn)向前端網(wǎng)頁開發(fā),在研究了Flask,DjangoTornado之后,選擇了簡單快速的Tornado,就是下面這個

在這里插入圖片描述


快速開發(fā)Python Web

1. 文件結(jié)構(gòu)

先準(zhǔn)備一個文件夾,例如取名python_web,文件結(jié)構(gòu)如下

python_web
    |— templates
    |    |— index.html
    |— main.py

或者看截圖


python_web


2. index.html代碼

index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8”>
    </head>
    <body>
        <div>
            <form method='post' target=‘/‘>
                <input type='date' title='開始日期' name=‘begindate’>
                <input type='date' title='結(jié)束日期' name='enddate’> 
                <input type='submit' title='點擊運行' value=‘運行’>
            </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行代碼,很簡單的一個網(wǎng)頁

  • 3-5行,為了讓網(wǎng)頁支持中文
  • 7-13行,條件設(shè)置部分
    這里面有兩個要傳入py的變量,用name屬性進行了標(biāo)記,分別是變量begindate,變量enddate
  • 14-33行,表格數(shù)據(jù)部分
    這里是根據(jù)上面的條件,傳入py數(shù)據(jù)的兩個變量,一個是表格標(biāo)題變量col,一個是表格數(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)頁的標(biāo)題列表
config = {'host':'123.123.123.123','user':'dan','passwd':'dan','port':3306,'db':'dan'}  # 數(shù)據(jù)庫配置信息

class IndexHandler(tornado.web.RequestHandler):
    def get(self):  # 進入網(wǎng)頁時觸發(fā)
        self.render('index.html',col=col,data=(('',)))  # 渲染網(wǎng)頁,傳入?yún)?shù)
    
    def post(self): # 點擊按鈕時觸發(fā)
        begindate = self.get_argument('begindate')  # 接收網(wǎng)頁傳來的參數(shù)1
        enddate = self.get_argument('enddate')      # 接收網(wǎng)頁傳來的參數(shù)2
        # 下面是數(shù)據(jù)庫配置,連接,運行,關(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ú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)頁文件夾
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

40行代碼,主要分兩部分

  • IndexHandler
    點擊網(wǎng)頁觸發(fā)getpost方法時調(diào)用該部分
  • tornado
    服務(wù)器配置,開啟服務(wù)器


4. 參數(shù)傳遞流程圖

流程圖


網(wǎng)頁跑起來是這樣的


在這里插入圖片描述

選擇日期,點擊運行,就會出數(shù)據(jù).這操作比Excel切片器就簡單多了,而且背后有海量的數(shù)據(jù)庫數(shù)據(jù)支撐,可以說是海量數(shù)據(jù)了

至于ip,Windows需要進入cmd輸入ipconfig查看,Mac需要進入Terminal輸入ifconfig查看<small>(Mac的真是難找??)</small>


知識點

前后端 知識點
前端 html
后端 python pymysql模塊
python tornado模塊


參考資料

  1. Tornado Documentation
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呼股,更是在濱河造成了極大的恐慌葱弟,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慕嚷,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機蹦魔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咳燕,“玉大人勿决,你說我怎么就攤上這事≌忻ぃ” “怎么了低缩?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長曹货。 經(jīng)常有香客問我咆繁,道長,這世上最難降的妖魔是什么顶籽? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任玩般,我火速辦了婚禮,結(jié)果婚禮上礼饱,老公的妹妹穿的比我還像新娘坏为。我一直安慰自己究驴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布匀伏。 她就那樣靜靜地躺著洒忧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帘撰。 梳的紋絲不亂的頭發(fā)上跑慕,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音摧找,去河邊找鬼核行。 笑死,一個胖子當(dāng)著我的面吹牛蹬耘,可吹牛的內(nèi)容都是我干的芝雪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼综苔,長吁一口氣:“原來是場噩夢啊……” “哼惩系!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起如筛,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤堡牡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杨刨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晤柄,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年妖胀,在試婚紗的時候發(fā)現(xiàn)自己被綠了芥颈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡赚抡,死狀恐怖爬坑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涂臣,我是刑警寧澤盾计,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站赁遗,受9級特大地震影響闯估,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吼和,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骑素。 院中可真熱鬧炫乓,春花似錦刚夺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至箩做,卻和暖如春莽红,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背邦邦。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工安吁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人燃辖。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓鬼店,卻偏偏與公主長得像,于是被迫代替她去往敵國和親黔龟。 傳聞我的和親對象是個殘疾皇子妇智,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容