使用Flask创建基本的Python Web服务器

6

Flask是用于创建网页的基于Python的微框架。它可以用来在Pi上显示基于Web的界面,并且相对容易设置。它’对于创建仪表板很有用,我在寻找一种创建戏水池控制面板的方法时首先遇到了它。

本教程将说明如何创建一个基本站点以帮助您入门。一旦您’我们有一个工作示例,可以使用官方文档进入更高级的主题。

我在本教程中使用Python 3。它应该与Python 2相同,但是您需要替换所有对“python3” with “python”.

创建一个新的SD卡

为了避免与您可能已安装的其他软件发生冲突,我建议您通过向其写入最新的Raspbian映像来开始使用新的SD卡。一世 使用蚀刻机写入Raspberry Pi图像在Flask的初始实验中,我使用了来自 官方下载页面.

启用S​​SH

默认情况下,SSH被禁用。如果要从另一台计算机通过网络配置Pi,可以通过以下任一方法启用它:

  • 创建一个名为的空白文件“ssh”在启动分区中(在Windows中,这是您可以访问的唯一分区)
  • 使用raspi-config实用程序通过连接到Pi的监视器和键盘来启用SSH

看看 在Pi指南上启用SSH 欲获得更多信息。

查找IP地址

找出您的Pi的IP地址。如果使用显示器和键盘,则可以运行:

ifconfig

格式很可能是192.168。#。#。在编写本教程时,我的Pi使用的是192.168.1.19。

如果要通过SSH进行远程连接,则可以使用IP扫描程序进行查找,否则它将在路由器设置中列出。

更新资料& Change Password

启用S​​SH时,我强烈建议您将默认密码从“raspberry”!

采用 :

passwd

设置新密码,然后运行:

sudo raspi-config

选择“Advanced” followed by “Expand Filesystem”.

为了确保我们将安装最新的软件包,请运行以下两个命令:

sudo apt-get update
sudo apt-get -y upgrade

此过程可能需要5-10分钟。

安装点子

在安装Flask之前,我们需要安装pip,Python软件包管理器:

sudo apt-get -y install 蟒蛇3-pip

安装烧瓶

现在它’是时候安装Flask了:

sudo pip3 install flask

我在输出中收到一些错误,但最后报告了“成功安装烧瓶”.

创建测试Flask应用

现在已经安装了Flask,我们需要创建一个小型测试站点来检查一切是否正常。在本教程中,我将假设测试站点为“testSite”。您可以使用任何喜欢的名称,但需要将所有引用交换为“testSite”用你的名字。新建一个文件夹 :

cd ~
mkdir testSite

导航到新文件夹,然后使用以下命令创建新的Python脚本:

cd testSite
sudo 纳米 testSite.py

然后粘贴以下代码:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
 return "<html><body>
<h1>在Flask下运行的测试站点</h1>

</body></html>"

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

按“CTRL-X”, “Y” and “Enter”保存并返回命令提示符。

该脚本定义了一个简单的一页网站。

测试Python Web服务器

您现在可以使用以下命令运行脚本:

蟒蛇3 testSite.py

如果您在浏览器中访问Pi的IP地址,则测试站点应该可见:

Flask 蟒蛇 Web服务器测试站点

请注意,Flask默认使用端口5000,您需要用Pi替换192.168.1.19’s actual IP address.

Adding additional 页数

可以修改脚本以添加其他内容“pages”。看下面的例子:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
 return "<html><body>
<h1>在Flask下运行的测试站点</h1>

</body></html>"

@app.route("/hello")
def 你好():
 return "<html><body>
<h1>This is the 你好 page</h1>

</body></html>"
 
if __name__ == "__main__":
 app.run(host='0.0.0.0',debug=True)

它增加了一个额外的“route” called “hello”. This page will be 显示ed when you visit the 你好 sub-directory :

烧瓶测试现场

Even more 路线

您还可以将URL中的信息提取到脚本中,以创建更精细的页面组合。在这个例子中,我们’ve added /user/<username> and /post/<post_id> 路线.

from flask import Flask,render_template
app = Flask(__name__)

@app.route("/")
def index():
  data=['Index Page','My Header','red']
  return render_template('template1.html',data=data)

@app.route("/hello")
def 你好():
  data=['Hello Page','My Header','orange']
  return render_template('template1.html',data=data)
 
@app.route('/user/&lt;username&gt;')
def show_user(username):
    # show the user profile for that user
    return 'User %s' % 用户名

@app.route('/post/&lt;int:post_id&gt;')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id
 
if __name__ == "__main__":
  app.run(host='0.0.0.0',debug=True)

输入<ip_addr>:5000/user/john or <ip_addr>:5000 / post / 42,并显示一个页面,其中包含名称或帖子ID。

Using 范本 页数

您可以使用模板文件来保存大部分HTML,而不是在脚本中定义HTML页面。当您的页面更加复杂时,这使脚本更易于处理。

Flask looks for 范本 in the “templates” directory. Create a new directory for 范本 :

mkdir /home/pi/testSite/templates
cd /home/pi/testSite/templates
nano template1.html

然后粘贴此示例模板:

<!DOCTYPE html>
<html>
<head>
<title>{{ data[0] }}</title>
<link rel="stylesheet" href='/static/style.css' />
</head>
<body>
<h1>{{ data[1] }}</h1>
Favourite Colour : {{ data[2] }}
</body>
</html>

然后可以使用以下命令更新testSite.py:

纳米 testSite.py

内容替换为:

from flask import Flask,render_template
app = Flask(__name__)

@app.route("/")
def index():
 data=['Index Page','My Header','red']
 return render_template('template1.html',data=data)

@app.route("/hello")
def 你好():
 data=['Hello Page','My Header','orange']
 return render_template('template1.html',data=data)
 
if __name__ == "__main__":
 app.run(host='0.0.0.0',debug=True)

当两个“routes”被激活使用相同的模板,但是传递给它的值是不同的。因此,访客看到的页面略有不同。

您可以使用HTML和CSS增强模板。模板的优点在于,它们使主要的Python脚本专注于功能,而布局和美观性却留给了模板文件。

调试模式

在示例中“debug” flag is set to True. This runs Flask in 调试 mode which automatically reloads Flask when you update the script. It also provides error messages if the page fails to load. If you expose the site to the internet the 调试 flag should be set to False.

启动时自动运行脚本

如果您希望在Pi启动时自动运行Python脚本,可以使用以下技术:

crontab -e

如果出现提示,请选择要使用的编辑器。我倾向于使用“nano”。在注释块的底部插入以下行:

@reboot /usr/bin/python3 /home/pi/testSite/testSite.py &

按“CTRL-X”, “Y” and “Enter”保存并返回命令提示符。

当您重新启动时,它将运行“testSite.py”. The “&”确保它在后台运行。

sudo raspi-config

选择“Boot options” and “Desktop/CLI”. The select “Console Autologin”。这意味着当Pi启动时,它将自动以Pi用户身份登录。

使用以下命令重新启动:

sudo reboot

并且您的网页应该在Pi上可用’您网络上的IP地址。

下载脚本

The example scripts and 范本 in this tutorial are available in 我的BitBucket存储库。可以使用以下链接下载它们: testSite1.py testSite2.py testSite3.py testSite4.py template1.py

您可以使用以下命令直接下载到您的Pi:

wget <url>

哪里<url>是上面的脚本网址之一。请记住将文件下载到正确的目录。模板应该放在“templates” directory.

官方文件& Other Resources

那里 is a lot more information 上 官方Flask文档页面.

It’也值得一看 树莓派基金会–使用Flask构建Python Web服务器教程。

分享。

6条留言

  1. 格雷姆·威廉姆斯

    那里’是一个小错字。当你’重新创建模板,您具有:

    纳米 index.html

    但是你真的是说

    纳米 template1.html

    除此之外,还介绍了许多精美的东西。

    — Graeme

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.