欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2024年12月30日 09:32:52   作者:但老師  
文章講述了作者從使用Excel搭建報(bào)表轉(zhuǎn)向前端網(wǎng)頁(yè)開(kāi)發(fā)的經(jīng)歷,使用Python和Tornado框架來(lái)快速開(kāi)發(fā)一個(gè)簡(jiǎn)單的網(wǎng)頁(yè)應(yīng)用,解決Excel報(bào)表的局限性,如版本控制、跨平臺(tái)兼容性、數(shù)據(jù)更新等問(wèn)題

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,DjangoTornado之后,選擇了簡(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ā)getpost方法時(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)文章

最新評(píng)論