赞
踩
Flask诞生于2010年,是用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。
Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。
其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是Flask框架的核心。
Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。
Flask常用扩展包:
扩展列表: http://flask.pocoo.org/extensions/
使用虚拟环境安装Flask,可以避免包的混乱和版本的冲突,虚拟环境是Python解释器的副本,在虚拟环境中你可以安装扩展包,为每个程序单独创建的虚拟环境,可以保证程序只能访问虚拟环境中的包。而不会影响系统中安装的全局Python解释器,从而保证全局解释器的整洁。
虚拟环境使用virtualenv创建,可以查看系统是否安装了virtualenv:
$ virtualenv --version
安装虚拟环境
- $ sudo pip install virtualenv
- $ sudo pip install virtualenvwrapper
创建虚拟环境(须在联网状态下)
$ mkvirtualenv Flask_py
安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:
- # 1、创建目录用来存放虚拟环境
- mkdir
- $HOME/.virtualenvs
-
- # 2、打开~/.bashrc文件,并添加如下:
- export WORKON_HOME=$HOME/.virtualenvs
- source /usr/local/bin/virtualenvwrapper.sh
-
- # 3、运行
- source ~/.bashrc
进入虚拟环境
$ workon Flask_py
退出虚拟环境
如果所在环境为真实环境,会提示deactivate:未找到命令
$ deactivate Flask_py
- 指定Flask版本安装
- $ pip install flask==0.10.1
- pip freeze > requirements.txt
Mac系统:
$ easy_install flask==0.10.1
在ipython中测试安装是否成功
$ from flask import Flask
Python 项目中必须包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号,以便在新环境中进行部署操作。
在虚拟环境使用以下命令将当前虚拟环境中的依赖包以版本号生成至文件中:
$ pip freeze >requirements.txt
安装或升级包后,最好更新这个文件以保证虚拟环境中的依赖包。
需求文件的内容示例如下:
- alembic==0.9.2
- blinker==1.4
- click==6.7
- dominate==2.3.1
- Flask==0.10.1
- Flask-Bootstrap==3.3.7.1
- Flask-Login==0.4.0
- Flask-Mail==0.9.1
- Flask-Migrate==2.0.4
- Flask-Redis==0.3.0
- Flask-Script==2.0.5
- Flask-SQLAlchemy==2.2
- Flask-Testing==0.6.2
- Flask-WTF==0.14.2
- gunicorn==19.7.1
- itsdangerous==0.24
- Jinja2==2.9.6
- Mako==1.0.6
- MarkupSafe==1.0
- MySQL-python==1.2.5
- mysqlclient==1.3.10
- PyMySQL==0.7.11
- python-dateutil==2.6.0
- python-editor==1.0.3
- redis==2.10.5
- six==1.10.0
- SQLAlchemy==1.1.10
- uWSGI==2.0.15
- visitor==0.1.3
- Werkzeug==0.12.2
- WTForms==2.1
- xmltodict==0.11.0
当需要创建这个虚拟环境的完全副本,可以创建一个新的虚拟环境,并在其上运行以下命令:
$ pip install -r requirements.txt
from flask import Flask
app = Flask(__name__)
- @app.route('/')
- def index():
- return 'Hello World'
- if __name__ == '__main__':
- app.run()
使用 methods 参数指定可接受的请求方式,可以是多种
- @app.route('/',methods=['GET', 'POST'])
- def hello():
- return 'hello world'
有时我们需要将同一类URL映射到同一个视图函数处理,比如:使用同一个视图函数 来显示不同用户的订单信息。
路由传递的参数默认当做string处理
- @app.route('/orders/<order_id>')
- def hello_itheima(order_id):
- # 此处的逻辑: 去查询数据库改用户的订单信息, 并返回
- print type(order_id) # 类型为unicode
- return 'hello itcast %d' % order_id
这里指定int, 会调用系统的路由转换器进行匹配和转换.
- - 大致原理是将参数强转为int, 如果成功, 则可以进行路由匹配
- - 如果参数无法转换成功, 就无法匹配该路由
- @app.route('/orders/<int:order_id>')
- def hello_itheima(order_id):
- print type(order_id) # 类型为int
- return 'hello itcast %d' % order_id
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。