flask介绍
Flask是一个基于Python的微型的web开发框架。虽然Flask是微框架,不过我们并不需要像别的微框架建议的那样把所有代码都写到单文件中。毕竟微框架真正的含义是简单和短小。我们可以从单文件架构开始工作,只用需要的特性。等我们渐渐熟悉Flask之后,可以将代码提取成模块,同时学习Flask提供的高级功能。
安装
参考资源【2】安装步骤,安装虚拟环境
安装 Flask 最便捷的方式是使用虚拟环境。虚拟环境是 Python 解释器的一个私有副本,在这个环境中你可以安装私有包,而且不会影响系统中安装的全局 Python 解释器。
虚拟环境非常有用,可以在系统的 Python 解释器中避免包的混乱和版本的冲突。为每个程序单独创建虚拟环境可以保证程序只能访问虚拟环境中的包,从而保持全局解释器的干净整洁,使其只作为创建(更多)虚拟环境的源。使用虚拟环境还有个好处,那就是不需要管理员权限。
虚拟环境使用第三方实用工具 virtualenv 创建。输入以下命令可以检查系统是否安装了virtualenv:
$ virtualenv --version
如果结果显示错误,你就需要安装这个工具。Python 3.3 通过 venv 模块原生支持虚拟环境,命令为 pyvenv。pyvenv 可以替代 virtualenv。不过要注意,在 Python 3.3 中使用 pyvenv 命令创建的虚拟环
境不包含 pip,你需要进行手动安装。Python 3.4 改进了这一缺陷,pyvenv 完全可以代替 virtualenv。
大多数 Linux 发行版都提供了 virtualenv 包。例如,Ubuntu 用户可以使用下述命令安装它:
$ sudo apt-get install python-virtualenv
如果你的电脑是 Mac OS X 系统,就可以使用 easy_install 安装 virtualenv:
$ sudo easy_install virtualenv
如果你使用微软的 Windows 系统或其他没有官方 virtualenv 包的操作系统,那么安装过程要稍微复杂一点。在浏览器中输入网址 https://bitbucket.org/pypa/setuptools,回车后会进入 setuptools 安装程序的主页。在这个页面中找到下载安装脚本的链接,脚本名为 ez_setup.py。把这个文件保存到电脑的一个临时文件夹中,然后在这个文件夹中执行以下命令:
$ python ez_setup.py
$ easy_install virtualenv
上述命令必须以具有管理员权限的用户身份执行。在微软 Windows 系统中,请使用“以管理员身份运行”选项打开命令行窗口;在基于 Unix 的系统中,要在上面两个命令前加上 sudo,或者以根用户身份执行。一旦安装完毕,virtualenv 实用工具就可以从常规账户中调用。
现在你要新建一个文件夹,用来保存示例代码(示例代码可从 GitHub 库中获取)。获取示例代码最简便的方式是使用 Git 客户端直接从 GitHub 下载。下述命令从 GitHub 下载示例代码,并把程序文件夹切换到“1a”版本,即程序的初始版本:
$ git clone https://github.com/miguelgrinberg/flasky.git
$ cd flasky
$ git checkout 1a
下一步是使用 virtualenv 命令在 flasky 文件夹中创建 Python 虚拟环境。这个命令只有一个必需的参数,即虚拟环境的名字。创建虚拟环境后,当前文件夹中会出现一个子文件夹,名字就是上述命令中指定的参数,与虚拟环境相关的文件都保存在这个子文件夹中。按照惯例,一般虚拟环境会被命名为 venv:
$ virtualenv venv
New python executable in venv/bin/python2.7
Also creating executable in venv/bin/python
Installing setuptools............done.
Installing pip...............done.
现在,flasky 文件夹中就有了一个名为 venv 的子文件夹,它保存一个全新的虚拟环境,其中有一个私有的 Python 解释器。在使用这个虚拟环境之前,你需要先将其“激活”。如果你使用 bash 命令行(Linux 和 Mac OS X 用户),可以通过下面的命令激活这个虚拟环境:
$ source venv/bin/activate
如果使用微软 Windows 系统,激活命令是:
$ venv\Scripts\activate
虚拟环境被激活后,其中 Python 解释器的路径就被添加进 PATH 中,但这种改变不是永久性的,它只会影响当前的命令行会话。为了提醒你已经激活了虚拟环境,激活虚拟环境的命令会修改命令行提示符,加入环境名:
(venv) $
当虚拟环境中的工作完成后,如果你想回到全局 Python 解释器中,可以在命令行提示符下输入
deactivate
博客
1、Flask——使用Python和OpenShift进行即时Web开发
2、windows下搭建flask环境:讲的比较细致
资源:
1、Jinja2 2.9.5:A small but fast and easy to use stand-alone template engine written in pure python.
Jinja2 is a template engine written in pure Python. It provides a Django inspired non-XML syntax but supports inline expressions and an optional sandboxed environment.
2、Flask Web开发:基于Python的Web应用开发实战 中文pdf版[9MB]
3、
通过简单例子学习flask
环境:64位win7,Python 3.6,eclipse+Pydev
说明:该代码实现了hello world 网页显示,同时根据输入名称显示:hello **。代码改编自官方文档
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/hello/')#@:装饰器;这句可以显示url=/hello时的网页
@app.route('/hello/<name>')#这句可以显示url=/hello/<name>时的网页
def hello(name=None):
return render_template('hello.html', name=name)#返回模板;
if __name__ == '__main__':
app.run()
运行:将上述代码保存成.py文件,同时在.py文件同级目录下,建立templates文件夹存储网页模板:hello.html,格式如下所示。
/application.py
/templates
/hello.html
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello World ni hao!</h1>
{% endif %}
通过浏览器输入不同的值,得到的网页变化如下,注意地址栏的变化。
关键地方注释
1、如何理解Python装饰器
摘要:
装饰器本质上是一个Python函数,可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
例子:
def foo()
print('i am foo')
现在有一个新的需求,希望可以记录下函数的执行日志,于是在代码中添加日志代码
def foo():
print('i am foo')
logging.info('foo is running')
bar()、bar2()也有类似的需求,怎么做?再写一个logging在bar函数里?这样就造成大量雷同的代码,为了减少重复写代码,我们可以这样做,重新定义一个函数:专门处理日志 ,日志处理完之后再执行真正的业务代码
def use_logging(func):
logging.warn('%s is running'%func.__name__)
func()
def bar():
print('i am bar')
use_logging(bar)
逻辑上不难理解, 但是这样的话,我们每次都要将一个函数作为参数传递给use_logging函数。而且这种方式已经破坏了原有的代码逻辑结构,之前执行业务逻辑时,执行运行bar(),但是现在不得不改成use_logging(bar)。那么有没有更好的方式的呢?当然有,答案就是装饰器
简单装饰器
def use_logging(func):
def wrapper(*args,**kwargs):
logging.warn('%s is running'%func.__name__)
return func(*args,**kwargs)
return wrapper
def bar():
print('i am bar')
bar=use_logging(bar)
bar()
函数use_logging就是装饰器,它把执行真正业务方法的func包裹在函数里面,看起来像bar被use_logging装饰了。在这个例子中,函数进入和退出时 ,被称为一个横切面(Aspect),这种编程方式被称为面向切面的编程(Aspect-Oriented Programming)。
@符号是装饰器的语法糖,在定义函数的时候使用,避免再一次赋值操作
def use_logging(func):
def wrapper(*args,**kwargs):
logging.warn("%s is running"%func.__name__)
return func(*args)
return wrapper
@use_logging
def foo():
print("i am foo")
@use_logging
def bar():
print("i am bar")
bar()
如上所示,这样我们就可以省去bar = use_logging(bar)这一句了,直接调用bar()即可得到想要的结果。
1237

被折叠的 条评论
为什么被折叠?



