Python tornado用40行代码搭建数据库交互网页实现快速全栈开发方式

 更新时间:2024年12月30日 09:32:52   作者:但老师  
文章讲述了作者从使用Excel搭建报表转向前端网页开发的经历,使用Python和Tornado框架来快速开发一个简单的网页应用,解决Excel报表的局限性,如版本控制、跨平台兼容性、数据更新等问题

Python tornado用40行代码搭建数据库交互网页实现快速全栈开发

作为数据分析师,我们大部分时间做的事情都是搭建线下Excel报表,这既有优点也有缺点

优点

  • 开发效率
    快速建模,最快十分钟就可以建模
  • 数据传播
    便于传播,发文件就是发模型
  • 交互友好
    对使用者门槛低,便于修改

缺点

  • 版本控制
    文件副本太多,极难做版本控制。经常有人找我修改模型却发现我已经更新了,只是没有给他最新版本
  • 平台限制
    无法跨平台,Mac不能用,WPS不能用,Excel2010及以下版本不能用
  • 静态数据
    更新数据有门槛,必须Windows系统,需要Excel2013及以上版本,还需要数据库账号密码,还需要IE9及以上浏览器,如果是早期Excel2016版本,还需要修改ReturnSingleDatabase语句
  • 数据量小
    基本上一个Excel模型,在目前主流Windows电脑上存放1万数据就开始卡,10万数据要刷新很久,100万基本上非i7不能刷新和使用了

基于以上这些问题,我开始转向前端网页开发,在研究了Flask,DjangoTornado之后,选择了简单快速的Tornado,就是下面这个:

快速开发Python Web

1. 文件结构

先准备一个文件夹,例如取名python_web,文件结构如下

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='开始日期' name='begindate'>
                <input type='date' title='结束日期' 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行代码,很简单的一个网页

  • 3-5行,为了让网页支持中文
  • 7-13行,条件设置部分
    这里面有两个要传入py的变量,用name属性进行了标记,分别是变量begindate,变量enddate
  • 14-33行,表格数据部分
    这里是根据上面的条件,传入py数据的两个变量,一个是表格标题变量col,一个是表格数据变量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 = ['标题1','标题2','标题3','标题4']	# 传入网页的标题列表
config = {'host':'123.123.123.123','user':'dan','passwd':'dan','port':3306,'db':'dan'}	# 数据库配置信息

class IndexHandler(tornado.web.RequestHandler):
    def get(self):	# 进入网页时触发
        self.render('index.html',col=col,data=(('',)))	# 渲染网页,传入参数
    
    def post(self):	# 点击按钮时触发
        begindate = self.get_argument('begindate')	# 接收网页传来的参数1
        enddate = self.get_argument('enddate')		# 接收网页传来的参数2
        # 下面是数据库配置,连接,运行,关闭
        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)	# 渲染网页,传入参数

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'))	# 指明网页文件夹
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

40行代码,主要分两部分

  • IndexHandler
    点击网页触发getpost方法时调用该部分
  • tornado
    服务器配置,开启服务器

4. 参数传递流程图

网页跑起来是这样的

选择日期,点击运行,就会出数据。这操作比Excel切片器就简单多了,而且背后有海量的数据库数据支撑,可以说是海量数据了

至于ip,Windows需要进入cmd输入ipconfig查看,Mac需要进入Terminal输入ifconfig查看(Mac的真是难找💢)

知识点

前后端知识点
前端html
后端python pymysql模块
python tornado模块

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python字符串格式化format()方法运用实例

    Python字符串格式化format()方法运用实例

    这篇文章主要给大家介绍了关于Python字符串格式化format()方法运用实例的相关资料,字符串格式化是Python编程中十分常用的部分,它可以帮助我们将更具可读性的数据输出到控制台或写入文件,需要的朋友可以参考下
    2023-08-08
  • Python利用BeautifulSoup解析Html的方法示例

    Python利用BeautifulSoup解析Html的方法示例

    BeautifulSoup是python的一个库,最主要的功能是从网页抓取数据。下面这篇文章主要给大家介绍了关于Python利用BeautifulSoup解析Html的方法示例,文中通过示例代码介绍的非常详细,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-07-07
  • Python复制目录结构脚本代码分享

    Python复制目录结构脚本代码分享

    这篇文章主要介绍了Python复制目录结构脚本代码分享,本文分析了需求、讲解了匿名函数lambda等内容,并给出了脚本代码,需要的朋友可以参考下
    2015-03-03
  • 使用Python删除PDF文件名中的特定文字

    使用Python删除PDF文件名中的特定文字

    在处理大量PDF文件时,有时候我们可能需要对文件名进行批量修改,例如,我们可能需要将文件名中的特定文字删除或替换,今天,我将向大家介绍如何使用Python编写一个简单的程序,选择一个文件夹,并删除文件名中的指定文字,需要的朋友可以参考下
    2023-09-09
  • Python matplotlib实战之箱型图绘制

    Python matplotlib实战之箱型图绘制

    箱型图(Box Plot),也称为盒须图或盒式图,是一种用作显示一组数据分布情况的统计图,因型状如箱子而得名,本文主要为大家介绍了如何使用Matplotlib绘制箱型图,需要的小伙伴可以参考下
    2023-08-08
  • Tensorflow 训练自己的数据集将数据直接导入到内存

    Tensorflow 训练自己的数据集将数据直接导入到内存

    这篇文章主要介绍了Tensorflow 训练自己的数据集将数据直接导入到内存,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • python: 自动安装缺失库文件的方法

    python: 自动安装缺失库文件的方法

    今天小编就为大家分享一篇python: 自动安装缺失库文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python 实现logging动态变更输出日志文件名

    python 实现logging动态变更输出日志文件名

    这篇文章主要介绍了python 实现logging动态变更输出日志文件名的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • python 实现在txt指定行追加文本的方法

    python 实现在txt指定行追加文本的方法

    下面小编就为大家分享一篇python 实现在txt指定行追加文本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 如何用Python实现简单的Markdown转换器

    如何用Python实现简单的Markdown转换器

    这篇文章主要介绍了如何用Python实现简单的Markdown转换器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07

最新评论