在Linux上安装Python的Flask框架和创建第一个app实例的教程


Posted in Python onMarch 30, 2015

无论你在linux上娱乐还是工作,这对你而言都是一个使用python来编程的很好的机会。回到大学我希望他们教我的是Python而不是Java,这学起来很有趣且在实际的应用如yum包管理器中很有用。

本篇教程中我会带你使用python和一个称为flask的微型框架来构建一个简单的应用,来显示诸如每个进程的内存使用,CPU百分比之类有用的信息。
前置需求

Python基础、列表、类、函数、模块。HTML/CSS (基础)。

学习这篇教程你不必是一个python高级开发者,但是首先我建议你阅读https://wiki.python.org/moin/BeginnersGuide/NonProgrammers 。
在Linux上安装Python 3

在大多数Linux发行版上Python是默认安装的。下面的你命令可以让你看到安装的版本。
 

[root@linux-vps ~]# python -V
Python 2.7.5

我们会使用3.x的版本来构建我们的app。根据Python.org所说,现在只对这个版本进行改进,而且不向后兼容Python 2。

注意: 在开始之前,我强烈建议你在虚拟机中尝试这个教程,因为Python是许多Linux发行版的核心组件,任何意外都可能会损坏你的系统。

以下步骤是基于红帽的版本如CentOS(6和7),基于Debian的版本如UbuntuMint和Resbian可以跳过这步,Pythonn 3应该默认已经安装了。如果没有安装,请用apt-get而不是yum来安装下面相应的包。
 

[leo@linux-vps] yum groupinstall 'Development Tools'
[leo@linux-vps] yum install -y zlib-dev openssl-devel sqlite-devel bzip2-devel
[leo@linux-vps] wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
[leo@linux-vps] tar -xvzf Python-3.4.2.tgz
[leo@linux-vps] cd Python-3.4.2
[leo@linux-vps] ./configure
[leo@linux-vps] make
# 推荐使用 make altinstall 以覆盖当前的 python 库
[leo@linux-vps] make altinstall

成功安装后,你应该可以用下面的命令进入Python3.4的shell了。
 

[leo@linux-vps]# python3.4
Python 3.4.2 (default, Dec 12 2014, 08:01:15)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit ()

使用pip来安装包

Python有它自己的包管理去,与yum和apt-get相似。你将需要它来下载、安装和卸载包。
 

[leo@linux-vps] pip3.4 install "packagename"
[leo@linux-vps] pip3.4 list
[leo@linux-vps] pip3.4 uninstall "packagename"

Python虚拟环境

在Python中虚拟环境是一个放置你的项目的依赖环境的目录。这是一个将带有不同的依赖环境的项目隔离的好办法。它可以让你不用sudo命令就能安装包。
 

[leo@linux-vps] mkdir python3.4-flask
[leo@linux-vps] cd python3.4-flask
[leo@linux-vps python3.4-flask] pyvenv-3.4 venv

要创建虚拟环境你需要使用“pyvenv-3.4”命令。上述命令会在venv文件夹的内部创建一个名为lib的目录,这里会安装项目所依赖的包。这里同样会创建一个bin文件夹容纳该环境下的pip和python可执行文件。
为我们的Linux系统信息项目激活虚拟环境
 

[leo@linux-vps python3.4-flask] source venv/bin/activate
[leo@linux-vps python3.4-flask] which pip3.4
~/python3.4-flask/venv/bin/pip3.4
[leo@linux-vps python3.4-flask] which python3.4
~/python3.4-flask/venv/bin/python3.4

使用pip安装flask

让我们继续安装第一个模块flask框架,它可以处理访问路由和渲染显示我们app的模板。
 

[leo@linux-vps python3.4-flask]pip3.4 install flask

在flask中创建第一个应用
第一步:创建你app的目录
 

[leo@linux-vps python3.4-flask] mkdir app
[leo@linux-vps python3.4-flask] mkdir app/static
[leo@linux-vps python3.4-flask] mkdir app/templates

在python3.4-flask文件夹中创建一个名为app的文件夹,它包含了两个子文件夹“static”和“templates”。我们的Python脚本会放在app文件夹,像css/js这类文件会在static文件夹,template文件夹会包含我们的html模板。
第二步:在app文件夹内部创建一个初始化文件
 

[leo@linux-vps python3.4-flask] vim app/_init_.py
from flask import Flask
 
app = Flask(__name__)
from app import index

这个文件会创建一个Flask的新的实例,并加载我们存储在index.py文件中的python程序——这个文件我们之后会创建。
 

[leo@linux-vps python3.4-flask]vim app/index.py
from app import app
 
@app.route('/')
def index():
import subprocess
cmd = subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out,error = cmd.communicate()
memory = out.splitlines()
 
return

flask中的访问路由通过“路由装饰器”处理。它用于将一个 URL 绑定到函数。
 

@app.route('/')
@app.route('/index')

要在python中运行shell命令,你可以使用Subprocess模块中的Popen类。
 

subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)

这个类会使用一个列表作为参数,列表的第一项默认是可执行的程序,下一项会是参数,这里是个另外一个例子。
 

subprocess.Popen(['ls', ‘-l'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)

stdout和stderr会相应地存储命令的输出和错误。你可以使用Popen的communicate方法来访问输出。
 
out,error = cmd.communicate()

要更好地用html模板显示输出,我会使用splitlines()方法,
 

memory = out.splitlines()

关于subprocess模块更多的信息会在教程的最后给出。
第三步:创建一个html模板来显示我们命令的输出。

要做到这个我们使用flask中的Jinja2模板引擎来为我们渲染。

最后你的index.py文件应该看起来像这样:
 

from flask import render_template
from app import app
 
def index():
import subprocess
cmd = subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out,error = cmd.communicate()
memory = out.splitlines()
 
return render_template('index.html', memory=memory)

现在在你的模板目录下创建一个index.html模板,flask会自动搜索这个目录下的模板。
 

[leo@linux-vps python3.4-flask]vim app/templates/index.html
 
Memory usage per process
 
{% for line in memory %}
{{ line.decode('utf-8') }}
 
{% endfor %}

Jinja2模板引擎允许你使用“{{ … }}”分隔符来输出结果,{% … %}来做循环和赋值。我使用“decode()”方法来格式化。
第四步:运行app
 

[leo@linux-vps python3.4-flask]vim run.py
from app import app
app.debug = True
app.run(host='174.140.165.231', port=80)

上面的代码会在debug模式下运行app。如果你不指定 IP 地址和端口,默认则是localhost:5000。
 

[leo@linux-vps python3.4-flask] chmod +x run.py
[leo@linux-vps python3.4-flask] python3.4 run.py

在Linux上安装Python的Flask框架和创建第一个app实例的教程

我已经加了更多的代码来显示CPU、I/O和平均负载。

在Linux上安装Python的Flask框架和创建第一个app实例的教程

你可以在这里浏览完整的代码。

这是一个对flask的简短教程,我建议你阅读下面的教程和文档来更深入地了解。

http://flask.pocoo.org/docs/0.10/quickstart/

https://docs.python.org/3.4/library/subprocess.html#popen-constructor

http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

Python 相关文章推荐
python实现问号表达式(?)的方法
Nov 27 Python
python selenium 获取标签的属性值、内容、状态方法
Jun 22 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
python issubclass 和 isinstance函数
Jul 25 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
python 如何设置守护进程
Oct 29 Python
PyChon中关于Jekins的详细安装(推荐)
Dec 28 Python
python 自动识别并连接串口的实现
Jan 19 Python
pytorch 一行代码查看网络参数总量的实现
May 12 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 Python
使用Python中PDB模块中的命令来调试Python代码的教程
Mar 30 #Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 #Python
使用Python标准库中的wave模块绘制乐谱的简单教程
Mar 30 #Python
Python中使用语句导入模块或包的机制研究
Mar 30 #Python
优化Python代码使其加快作用域内的查找
Mar 30 #Python
Python中分数的相关使用教程
Mar 30 #Python
Python2.x中str与unicode相关问题的解决方法
Mar 30 #Python
You might like
人族 Terran 基本策略
2020/03/14 星际争霸
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
PHP执行系统命令函数实例讲解
2021/03/03 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
基于python实现简单日历
2018/07/28 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
一篇.NET面试题
2014/09/29 面试题
受欢迎的大学生自我评价
2013/12/05 职场文书
失业者真诚求职信范文
2013/12/25 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
无毒社区工作方案
2014/05/23 职场文书
与美同行演讲稿
2014/09/13 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
街道社区活动报告
2015/02/05 职场文书
财务工作个人总结
2015/02/27 职场文书