【小沐学Python】Python实现Web服务器(Ubuntu下调试Flask)

62 篇文章 11 订阅
15 篇文章 0 订阅

在这里插入图片描述

🍺基于Python的Web服务器系列相关文章编写如下🍺:

  1. 🎈【Web开发】Python实现Web服务器(Flask快速入门)🎈
  2. 🎈【Web开发】Python实现Web服务器(Flask案例测试)🎈
  3. 🎈【Web开发】Python实现Web服务器(Flask部署上线)🎈
  4. 🎈【Web开发】Python实现Web服务器(Flask+Tornado+nginx)🎈
  5. 🎈【Web开发】Python实现Web服务器(Ubuntu下安装Flask)🎈
  6. 🎈【Web开发】Python实现Web服务器(Ubuntu下打包Flask)🎈
  7. 🎈【Web开发】Python实现Web服务器(Ubuntu下调试Flask)🎈
  8. 🎈【Web开发】Python实现Web服务器(Ubuntu下Flask使用MySQL)🎈

1、简介

本文介绍在ubuntu系统中如何远程开发,防火墙设置,配置python开发环境,以及使用flask框架进行web服务器的开发。

2、ubuntu远程访问

在虚拟机VMware Workstation Pro中安装了一个Ubuntu系统。
有人反映新装的Ubuntu竟然没有默认安装ssh。

更新一下软件源:

sudo apt-get update

在这里插入图片描述
下载ssh并安装:
安装命令:sudo apt-get install openssh-server
卸载命令:sudo apt-get remove openssh-server

sudo apt-get install openssh-server

在这里插入图片描述
查看是否开启了ssh服务 (没有开始的话使用命令sudo service ssh start)

sudo service ssh start
sudo ps -e | grep ssh

在这里插入图片描述
看到sshd那说明ssh-server已经启动了。若没有则可以这样启动:sudo /etc/init.d/ssh start 或者 service ssh start。

进入Ubuntu,Ctrl+Alt+T打开终端,输入ifconfig命令查看IP情况,如下图:

ifconfig

在这里插入图片描述
首先要保证虚拟机和主机之间可以互相ping通,如果不能ping通则后续工作无法进行。
打开Putty客户端,出现以下界面,填入相关参数:
在这里插入图片描述
输入ubuntu系统的用户名和密码:
在这里插入图片描述
成功进入命令行界面:
在这里插入图片描述

putty连接Ubuntu虚拟机超时,Network error: Connection timed out?
网络能ping通,但是putty连接Ubuntu时却显示连接超时?

(1)如果仍然无法远程访问ubuntu系统,可能是ubuntu防火墙开了,关掉试试。
(2)也可以试试还原vmware的网络设置,当然ip等信息会自动变化。
在这里插入图片描述
在这里插入图片描述
点击还原默认设置即可,还原后,他的子网地址会改变,linux的ip地址也会改变。

3、ubuntu进程管理

3.1 top命令查看进程pid

top

在这里插入图片描述

3.2 ps命令查看进程

相关参数整理如下:

-aux    以BSD风格显示进程 常用
-efH    以System V风格显示进程
-e , -A 显示所有进程
a         显示终端上所有用户的进程
x         显示无终端进程
u         显示详细信息
f          树状显示
w        完整显示信息
l          显示长列表
ps

在这里插入图片描述

ps aux

在这里插入图片描述

ps aux| grep pyheat

在这里插入图片描述

3.3 kill命令关闭进程

kill -9  pid    #用来强制终止指定pid进程(推荐使用此方法)
kill -9 -1      #终止你拥有的全部进程
kill -9 15494

在这里插入图片描述

pkill  firefox

在这里插入图片描述

3.4 nohup命令

nohup 命令是英语词组 no hangup 的缩写,意思是不挂断,也就是指程序不退出。这个命令会使程序忽略 HUP 信号,保证程序能够正常进行。

  • 1、nohup 是 no hang up 的缩写,就是不挂断的意思。
  • 2、nohup命令:在系统上运行一个进程的时候,不想让其在你退出账号时关闭,即可用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
  • 3、nohup在不规定的情况下,所以输出内容会到nohup.out中。
nohup python3 demo.py >/dev/null 2>&1 &

run.py为Flask项目的启动脚本,在python环境中不间断的运行run.py,并且将标准内容和错误内容输出到flask.log这个日志文件中,即请求api若出现报错信息即可通过日志定位到问题。

nohup python3 run.py >> /www/wwwroot/log/flask.log 2>&1 &
  • 2>&1的意思:
0 表示stdin标准输入,用户键盘输入的内容
1 表示stdout标准输出,输出到显示屏的内容
2 表示stderr标准错误,报错内容
2>&1是一个整体,>左右不能有空格,即将错误内容重定向输入到标准输出中去。
  • nohup和&的区别:
    1、&才是后台运行
    2、nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;
    在这里插入图片描述

3.5 设置开机自启动

在/usr/lib/systemd/system目录下包含了各种unit文件,有service后缀的服务unit,有target后缀的开机级别unit等,这里介绍关于service后缀的文件。因为systemd在开机要想执行自启动,都是通过这些*.service 的unit控制的,服务又分为系统服务(system)和用户服务(user)。
系统服务目录:/usr/lib/systemd/system/,开机不登录就能运行的程序(常用于开机自启)。
用户服务目录:/usr/lib/systemd/user/,需要登录以后才能运行的程序。

(づ ̄ 3 ̄)づ(づ ̄ 3 ̄)づ(づ ̄ 3 ̄)づ(づ ̄ 3 ̄)づ(づ ̄ 3 ̄)づ(づ ̄ 3 ̄)づ(づ ̄ 3 ̄)づ(づ ̄ 3 ̄)づ(づ ̄ 3 ̄)づ(づ ̄ 3 ̄)づ

在/usr/lib/systemd/system目录下新建my1225.service文件:

[Unit]
#服务描述
#Description=test Service
#指定了在systemd在执行完那些target之后再启动该服务
After=network.target

[Service]
#定义Service的运行类型,这种一般是开机自启动文件就是可执行文件
Type=simple

#Type=forking,这种一般是开机自启动文件为shell脚本文件,脚本文件里面可能写了多个需要
#开机自启动的程序,forking代表子进程的方式,就是脚本里的程序以子进程后台运行。

#定义systemctl start|stop|reload *.service 的执行方法(具体命令需要写绝对路径)
ExecStart=/home/tomcat/Desktop/test.sh -start#-start加不加都行
#创建私有的内存临时空间
PrivateTmp=True

[Install]
#多用户
WantedBy=multi-user.target
重载系统服务:systemctl daemon-reload
设置开机启动:systemctl enable *.service
启动服务:systemctl start *.service
停止服务:systemctl stop *.service
重启服务:systemctl restart *.service

d=====( ̄▽ ̄*)bd=====( ̄▽ ̄*)bd=====( ̄▽ ̄*)bd=====( ̄▽ ̄*)bd=====( ̄▽ ̄*)bd=====( ̄▽ ̄*)bd=====( ̄▽ ̄*)b

Ubuntu 20.04的服务管理是基于systemd的,因此设置服务自启动最推荐的方法是在/etc/systemd/user目录下创建一个systemd服务文件,配置好要执行的服务。
(1)创建我们需要开机自启动的脚本,例如test.sh

#!/bin/bash -e 
 
# source /home/tomcat/venv_demo/bin/activate flask_test
# source命令进行conda环境激活,需要使用绝对路径打开acvatie目录指定。
 
cd /home/tomcat/flask_test
gunicorn -w 4 -b 127.0.0.1:8000 flask_test:app &
 
exit 0

(2)在/etc/systemd/user目录下创建一个systemd服务文件, 命名为my1225.service

[Unit]
After=network.service
# After表示在哪个服务启动后启动我们的程序,After=network.service 表示网络连接完成后,启动我们的程序

[Service]
ExecStart=/home/tomcat/test.sh # 此处只能绝对路径
# ExecStart表示我们的脚本(步骤1中的test.sh)的执行路径

[Install]
WantedBy=default.target
# WantedBy默认填default.target,表示我们程序所在的服务组。
# vi /etc/systemd/system/flaskapp.service

[Unit]
Description=A Gunicorn example to serve Flask App
After=network.target

[Service]
WorkingDirectory=/home/tomcat
ExecStart=/home/tomcat/python/bin/gunicorn -w 3 -b 0.0.0.0:8888 wsgi:app --timeout 120

[Install]
WantedBy=multi-user.target

(3)将systemd服务文件和我们的脚本更改权限,使其可执行。

sudo chmod 744 ~/test.sh
sudo chmod 664 /etc/systemd/user/my1225.service

(4)重新加载系统的systemd服务文件,并启用我们自己写的my1225.service文件。

sudo systemctl daemon-reload
systemctl --user enable my1225.service

(5)取消开机自启动

systemctl --user disable my1225.service
cd /etc/systemd/user
rm my1225.service

(。・∀・)ノ (。・∀・)ノ (。・∀・)ノ (。・∀・)ノ (。・∀・)ノ (。・∀・)ノ (。・∀・)ノ (。・∀・)ノ (。・∀・)ノ (。・∀・)ノ

创建一个systemd单元文件将允许Ubuntu的init系统自动启动uWSGI并在服务器启动时为Flask应用程序提供服务。
在/etc/systemd/system目录创建一个以.service为结尾的单元文件开始:

sudo nano /etc/systemd/system/myproject.service
[Unit]
Description=uWSGI instance to serve myproject
After=network.target
​
[Service]
User=sammy
Group=www-data
WorkingDirectory=/home/sammy/myproject
Environment="PATH=/home/sammy/myproject/myprojectenv/bin"
ExecStart=/home/sammy/myproject/myprojectenv/bin/uwsgi --ini myproject.ini
​
[Install]
WantedBy=multi-user.target

这样,我们的systemd服务文件就完成了。立即保存并关闭它。
我们现在可以启动我们创建的uWSGI服务并启用它,以便它在启动时启动:

sudo systemctl start myproject
sudo systemctl enable myproject
sudo systemctl status myproject

( o=^•ェ•)o ┏━┓( o=^•ェ•)o ┏━┓( o=^•ェ•)o ┏━┓( o=^•ェ•)o ┏━┓( o=^•ェ•)o ┏━┓( o=^•ェ•)o ┏━┓(

(1)创建系统服务

vim /usr/lib/systemd/system/robot.service
[Unit]
Description=robot
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/python3/bin/ENV/bin/python /usr/local/python3/bin/ENV/p3.py &
PrivateTmp=true
[Install]
WantedBy=multi-user.target

ExecStart为服务启动时执行的命令,不能用相对路径, 一定要全路径。
这里也可以将命令写到任意的.sh文件中。
(2)启用自定义系统服务

systemctl enable robot
systemctl start robot
ps aux|grep robot

4、ubuntu网络端口管理

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

-a或–all:显示所有连线中的Socket;
-A<网络类型>或–<网络类型>:列出该网络类型连线中的相关地址;
-c或–continuous:持续列出网络状态;
-C或–cache:显示路由器配置的快取信息;
-e或–extend:显示网络其他相关信息;
-F或–fib:显示FIB;
-g或–groups:显示多重广播功能群组组员名单;
-h或–help:在线帮助;
-i或–interfaces:显示网络界面信息表单;
-l或–listening:显示监控中的服务器的Socket;
-M或–masquerade:显示伪装的网络连线;
-n或–numeric:直接使用ip地址,而不通过域名服务器;
-N或–netlink或–symbolic:显示网络硬件外围设备的符号连接名称;
-o或–timers:显示计时器;
-p或–programs:显示正在使用Socket的程序识别码和程序名称;
-r或–route:显示Routing Table;
-s或–statistice:显示网络工作信息统计表;
-t或–tcp:显示TCP传输协议的连线状况;
-u或–udp:显示UDP传输协议的连线状况;
-v或–verbose:显示指令执行过程;
-V或–version:显示版本信息;
-w或–raw:显示RAW传输协议的连线状况;
-x或–unix:此参数的效果和指定"-A unix"参数相同;
–ip或–inet:此参数的效果和指定"-A inet"参数相同。

4.1 查看端口是否被占用方法

netstat -anp |grep 40001

在这里插入图片描述

4.2 列出所有端口(包含TCP和UDP)

netstat -a

在这里插入图片描述

4.3 列出所有TCP端口

netstat -at

在这里插入图片描述

4.4 列出所有UDP端口

netstat -au

在这里插入图片描述

4.5 列出所有处于监听状态的 Sockets

netstat -l

在这里插入图片描述

4.6 只列出所有监听tcp端口

netstat -lt

在这里插入图片描述

4.7 只列出所有监听udp端口

netstat -lu

在这里插入图片描述

4.8 只列出所有监听UNIX端口

netstat -lx

在这里插入图片描述

4.9 输出中显示 PID 和进程名称

netstat -pt

在这里插入图片描述

4.10 输出中不显示主机,端口和用户名

netstat -an

在这里插入图片描述

4.11 显示核心路由信息

netstat -r
# or
netstat -rn

在这里插入图片描述
显示网络接口列表:

netstat -i

在这里插入图片描述

4.12 找出程序运行的端口

netstat -tunlp | grep ssh

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.13 找出运行在指定端口的进程

netstat -an | grep ":3306"

在这里插入图片描述
通过端口找进程ID:

netstat -tunlp | grep 80 | awk '{print $7}' | cut -d/ -f1
netstat -nltp
#或者
netstat -nltp | grep python
#或者
netstat -apn | grep 10010

在这里插入图片描述

5、ubuntu防火墙设置

5.1 查看防火墙状态

由于LInux原始的防火墙工具iptables过于繁琐,所以ubuntu默认提供了一个基于iptable之上的防火墙工具ufw。
ubuntu 9.10默认的便是UFW防火墙,它已经支持界面操作了。在命令行运行ufw命令就可以看到提示的一系列可进行的操作。
Ubuntu20.04一般都默认安装了UFW(Uncomplicated Firewall),它是一款轻量化的工具,主要用于对输入输出的流量进行监控。
如果没有安装,请用下面的命令安装:

sudo apt install ufw

正常情况安装以后应该是默认禁止状态的,输入如下命令查看状态:

sudo ufw status verbose

在这里插入图片描述
这表示防火墙没有开启,下面启用防火墙。

sudo ufw status

在这里插入图片描述

5.2 开启和关闭防火墙

只需设置如下三条命令:

sudo apt install ufw
sudo ufw enable
sudo ufw default deny

在这里插入图片描述
sudo ufw default allow/deny:外来访问默认允许/拒绝。
sudo ufw enable/disable:打开/关闭ufw。
sudo ufw status:查看已经定义的ufw规则。
sudo ufw delete allow/deny 20:删除以前定义的"允许/拒绝访问20端口"的规则。

sudo ufw disable

在这里插入图片描述

5.3 打开或关闭某个端口

sudo ufw allow 53 允许外部访问53端口(tcp/udp)
sudo ufw allow 3690 允许外部访问3690端口(svn)
sudo ufw allow from 192.168.1.111 允许此IP访问所有的本机端口
sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22  允许指定的IP段访问特定端口
sudo ufw delete allow smtp 删除上面建立的某条规则,比如删除svn端口就是 sudo ufw delete allow 3690 
sudo ufw allow 40001
sudo ufw delete allow 40001

在这里插入图片描述

6、flask测试

以 Flask 项目为例,Flask作为Web框架,它的作用主要是为了开发Web应用程序。
一个Web应用程序包含了三个部分,前端,服务端,数据库。

  • 数据库负责存储数据,作为数据存储和查询的引擎;
  • 前端网站作为用户直接查看的页面,负责展示数据。
  • Flask 负责对数据库进行操作,将数据库中的数据渲染至前端。

6.1 配置python开发环境

python

在这里插入图片描述

python3
# or
python3 -V

在这里插入图片描述
在这里插入图片描述

pip list

在这里插入图片描述

sudo apt install python3-pip

在这里插入图片描述

pip list

在这里插入图片描述

6.2 创建虚拟环境venv

# 新建测试文件夹
mkdir test
cd test

# 注意:python3 内置了venv,所以不用再pip安装virtualenv了。
# venv_demo 就是虚拟环境的名字
python -m venv venv_demo  

# 激活虚拟环境
venv_demo/Scripts/activate

在这里插入图片描述
创建虚拟环境失败,系统提示需要装工具。安装虚拟环境库venv工具。

sudo apt install python3.8-venv

在这里插入图片描述
安装成功,再继续创建虚拟环境如下:

python -m venv venv_demo  

在这里插入图片描述
激活虚拟环境如下:

source venv_demo/bin/activate

在这里插入图片描述

python
python -V
pip list

在这里插入图片描述

6.3 安装flask库

pip install flask

在这里插入图片描述
安装一步到位,安装成功如上。

6.4 测试flask入门例子

编写测试脚本demo.py如下:

  • demo.py:
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!小沐!'

if __name__ == '__main__':
    app.run()

运行命令如下:

python demo.py

在这里插入图片描述
运行结果,跨电脑无法访问。即使防火墙允许了端口5000。
在这里插入图片描述
修改测试脚本demo.py如下:

  • demo.py:
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!小沐!'

if __name__ == '__main__':
    app.run(host="0.0.0.0")

运行命令如下:

python demo.py

在这里插入图片描述
在这里插入图片描述
运行结果,跨电脑可以访问。

6.5 测试flask图表例子(pyecharts)

新建一个项目flask_pyecharts

  • (1)安装pyecharts库
pip install pyecharts

在这里插入图片描述

pip list

在这里插入图片描述

  • (2)拷贝 pyecharts 模板
    在这里插入图片描述

将链接中的以下模板
├── jupyter_lab.html
├── jupyter_notebook.html
├── macro
├── nteract.html
├── simple_chart.html
├── simple_page.html
└── table.html
全部拷贝到 tempaltes 文件夹中
https://github.com/pyecharts/pyecharts/tree/master/pyecharts/render/templates

  • (3)编写测试脚本demo_echart.py如下:
from flask import Flask
# from jinja2 import Markup
from markupsafe import Markup

from pyecharts import options as opts
from pyecharts.charts import Bar

app = Flask(__name__, static_folder="templates")


def bar_base() -> Bar:
    c = (
        Bar()
            .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
            .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
            .add_yaxis("商家B", [15, 25, 16, 55, 48, 8])
            .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
    )
    return c


@app.route("/")
def index():
    c = bar_base()
    return Markup(c.render_embed())


if __name__ == "__main__":
    app.run(host="0.0.0.0")

在这里插入图片描述
在这里插入图片描述

6.6 127.0.0.1还是0.0.0.0?

可能遇到的问题:flask接口只能用127.0.0.1访问,用内网或者外网都不能访问?

  • (1)采用直接运行flask文件的方式,那么host地址应该写“0.0.0.0”。
    如果写“127.0.0.1”的话就无法用内网地址或者外网地址。
  • (2)如果通过gunicorn(wsgi)运行flask,那么就是gunicorn配置文件里面的bind = ‘0.0.0.0:5000’。
    如果写127.0.0.1,那么就只能在本机通过127.0.0.1::port来访问,
    如果写0.0.0.0,那就就可以用127.0.0.1:port、内网:port、外网:port来访问flask接口。
# 内外网均正常访问的写法
app.run(host='0.0.0.0', port=5000, debug=True)

在这里插入图片描述


结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为你提供一些指导。 1. 安装必要的库 在Ubuntu下,你需要安装Python的MySQL客户端库和Flask库。可以通过以下命令来安装这些库: ``` sudo apt-get install python-dev default-libmysqlclient-dev build-essential pip install flask flask-mysqldb ``` 2. 连接数据库 在Python中连接MySQL数据库,可以使用MySQLdb或者PyMySQL库。这里我们以MySQLdb为例,在Python代码中添加以下代码: ``` import MySQLdb db = MySQLdb.connect(host="localhost", user="root", passwd="password", db="database_name") cursor = db.cursor() ``` 其中,`host`指数据库的服务器地址,`user`指连接数据库的用户名,`passwd`指连接数据库的密码,`db`指连接的数据库名。使用`db.cursor()`创建一个游标对象,用于执行SQL语句。 3. 实现增删查改 使用Flask框架,可以实现简单的增删查改功能。在Python代码中添加以下路由和函数: ``` from flask import Flask, render_template, request app = Flask(__name__) @app.route('/') def home(): return render_template('home.html') @app.route('/add', methods=['POST']) def add(): if request.method == 'POST': name = request.form['name'] age = request.form['age'] cursor.execute("INSERT INTO students (name, age) VALUES (%s, %s)", (name, age)) db.commit() return "Record added successfully" @app.route('/delete', methods=['POST']) def delete(): if request.method == 'POST': id = request.form['id'] cursor.execute("DELETE FROM students WHERE id = %s", (id,)) db.commit() return "Record deleted successfully" @app.route('/update', methods=['POST']) def update(): if request.method == 'POST': id = request.form['id'] name = request.form['name'] age = request.form['age'] cursor.execute("UPDATE students SET name=%s, age=%s WHERE id=%s", (name, age, id)) db.commit() return "Record updated successfully" @app.route('/search', methods=['POST']) def search(): if request.method == 'POST': name = request.form['name'] cursor.execute("SELECT * FROM students WHERE name = %s", (name,)) results = cursor.fetchall() return render_template('search_results.html', results=results) if __name__ == '__main__': app.run(debug=True) ``` 其中,`home()`函数渲染`home.html`模板,该模板中包含了一个表单,用于输入添加、删除、更新和查询数据的信息。`add()`函数用于添加数据,`delete()`函数用于删除数据,`update()`函数用于更新数据,`search()`函数用于查询数据。 4. 编写HTML模板 在Flask中,HTML模板使用Jinja2模板引擎。在项目目录下,创建`templates`目录,并在该目录下创建`home.html`和`search_results.html`两个文件。`home.html`模板中包含表单,用于输入增删查改的信息。`search_results.html`模板用于展示查询结果。 `home.html`模板代码如下: ``` <!DOCTYPE html> <html> <head> <title>Flask MySQL Example</title> </head> <body> <h1>Flask MySQL Example</h1> <form action="{{ url_for('add') }}" method="post"> <label for="name">Name:</label> <input type="text" name="name" id="name"> <label for="age">Age:</label> <input type="text" name="age" id="age"> <input type="submit" value="Add"> </form> <form action="{{ url_for('delete') }}" method="post"> <label for="id">ID:</label> <input type="text" name="id" id="id"> <input type="submit" value="Delete"> </form> <form action="{{ url_for('update') }}" method="post"> <label for="id">ID:</label> <input type="text" name="id" id="id"> <label for="name">Name:</label> <input type="text" name="name" id="name"> <label for="age">Age:</label> <input type="text" name="age" id="age"> <input type="submit" value="Update"> </form> <form action="{{ url_for('search') }}" method="post"> <label for="name">Name:</label> <input type="text" name="name" id="name"> <input type="submit" value="Search"> </form> </body> </html> ``` `search_results.html`模板代码如下: ``` <!DOCTYPE html> <html> <head> <title>Search Results</title> </head> <body> <h1>Search Results</h1> {% if results %} <table> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> {% for result in results %} <tr> <td>{{ result[0] }}</td> <td>{{ result[1] }}</td> <td>{{ result[2] }}</td> </tr> {% endfor %} </table> {% else %} <p>No results found.</p> {% endif %} </body> </html> ``` 5. 运行项目 在终端中进入项目目录,运行以下命令: ``` export FLASK_APP=app.py export FLASK_ENV=development flask run ``` 然后在浏览器中访问`http://localhost:5000/`,即可看到表单页面。 注意:在实际应用中,需要根据具体情况修改代码中的数据库连接信息和表名等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值