《FlaskWeb开发:基于Python的Web应用开发实战》笔记一-创新互联
一、安装
简介:
公司主营业务:成都网站设计、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出辉南免费做网站回馈大家。
- 在大多数标准汇总,Flask都算是小型框架,甚至可以成为“微框架”。同时具备高扩展的能力,具有一个包含基本服务的强健核心,其他功能可通过扩展实现。
- 两个主要依赖:路由、调试和Web服务器网关接口子系统有Werkzeug提供;模板系统由Jinja2提供。
1.1、使用虚拟环境
先将实验文件从git的仓库中下载到本地,并且切换到1a分支:
$ git clone https://github.com/miguelgrinberg/flasky.git
$ cd flasky
$ git checkout 1a
查看是否安装了virtualenv(虚拟环境使用第三方实用工具):
virtualenv --version
结果显示错误,则表示没安装,安装命令:
pip install virtualenv
使用virtualenv命令在flasky文件夹中创建Python虚拟环境:
virtualenv venv
virtualenv命令中只要一个必须参数,venv即是虚拟环境的名字。并且会创建一个子文件夹,所有与虚拟环境相关的文件都会保存在这个文件夹中。
- 激活虚拟环境:
source vev/bin/activate
退出当前虚拟环境,回到全局Python解释器中:
deactivate
1.2、使用pip命令安装Python包
进入flasky文件,激活虚拟环境,使用pip命令安装Flask:
$ cd flasky
$ source venv/bin/activate
$ pip install flask
二、程序的基本结构
2.1、初始化
所有Flask程序都必须创建一个程序实例。Web服务器使用一种WSGI的协议,把接收自客户端的所有请求都交由这个对象处理。程序实例是Flask类的对象。
from flask import Flask
app = Flask(__name__)
2.2、路由和视图函数
客户端把请求发送给Web服务器,Web服务器将请求发送给Flask程序实例。程序实例需要只要知道每个URL请求运行那些代码,即URL到Python函数的映射关系。
处理URL和Python函数之间的关系的程序成为路由
视图函数返回的响应可以包括HTML的简单字符串,也可以是复杂的表单。
2.3、启动服务器
程序实例用run方法启动Flask集成的开发Web服务器:
if __name__ == “__main__”:
app.run(debug=True)
2.4、一个完整的程序
将前几节介绍的Flask Web程序的不同组成部分合并到一个hello.py文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World!
'
if __name__ == "__main__":
app.run(debug=True)
切换到虚拟环境,执行hello.py文件,启动Flask程序:
- 访问Flask程序:
$: curl 127.0.0.1:5000
优化成包含动态路由的Flask程序
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World!
'
if __name__ == "__main__":
app.run(debug=True)
测试效果
2.5、请求-响应循环
2.5.1、程序和请求上下文
Flask从客户端接收到的请求,要让视图函数访问请求对象,一种显而易见的方式就是将其作为参数传入视图函数,不过导致程序中的每个视图函数都会增加一个参数。
为了避免大量可有可无的参数把视图函数弄的一团糟,Flask使用了上下文临时把某些对象变为全局可访问。在Flask中有两种上下文:程序上下文和请求上下文
- 变量名 上下文 说明
- current_app 程序上下文 当前激活程序的实例
- g 程序上下文 处理请求时用作临时存储的对象,每次请求都会重设这个变量
- request 请求上下文 请求对象,封装了客户端发出的HTTP请求中的内容
- session 请求上下文 用户会话,用于存储请求之间需要“记住”的值的词典。
2.5.2、请求调度
程序收到客户端发送的请求,要找到处理该请求的视图函数。
Flask会在程序的URL映射中查找请求的URL。URL映射是URL和视图函数之间的对应关系。
Flask使用app.route修饰器或者非修饰器形式的app.add_url_rule()生成映射。
- 查看Flask程序中的URL映射:(激活虚拟环境)
>> >> from hello import app
>> app.url_map
Map([ index>,
' (HEAD, OPTIONS, GET) -> static>,
' (HEAD, OPTIONS, GET) -> user>])
URL映射中的HEAD、Options、GET是请求方法,由路由进行处理。
2.5.3、请求钩子
有时候在处理请求之前或之后执行代码会很有用。请求钩子使用修饰器实现,Flask支持以下4种钩子:
- before_firest_request: 注册一个函数,在处理第一个请求之前运行
- before_request: 注册一个函数,在每次请求执勤啊运行
- after_request: 注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
- teardown_request: 注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。
2.5.4 响应
在大多数情况下,响应就是一个简单的字符串,作为HTML页面传回客户端。但HTTP协议需要的不仅是作为请求响应的字符串。
其中HTTP响应中一个很重要的部分是状态码,Flask默认为200.
make_response()函数可接受1个、2个或3个参数,并返回一个Response对象。
from flask import make_response
@app_route(‘/’)
def index():
response = make_response(‘This document carries a cookie!
’)
response.set_cookie(‘answer’,’42’)
return response
- 重定向使用redirect()辅助函数
from flask import redirect
@app.route(‘/’)
def index():
return redirect(“http://www.example.com”)
还有一种特殊的响应有abort函数生成,用于处理错误。
2.6、Flask扩展
使用Flask-Script支持命令行选项
Flask-Script是一个Flask扩展,为Flask程序添加一个命令行解析器。Flask-Script自带了一组常用选项,而且还支持自定义命令。
- Flask-Script扩展使用pip安装:
pip install flask-script
- 示例把命令解析行功能添加到hello.py程序中需要修改的地方
from flask import Flask
from flask_script import Manager
app = Flask( __name__ )
manager = Manager( app )
@app.route(‘/’)
def index():
return ‘hello,world
’
@app.route(‘/user/’)
def user(name):
return ‘hello,%s!
’ % name
if __name__ == “__main__”:
manager.run()
如果已经从git上克隆了该仓库,可以直接切换到2c分支上。
这样修改之后,程序可以使用一组基本命令行选项,现在运行hello.py
- --host参数告诉Web服务器在哪个网络接口上监听来自客户端的连接。
- --port参数告诉Web服务器在哪个网络端口。
python hello.py runserver --host 0.0.0.0 --port 9999
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
文章题目:《FlaskWeb开发:基于Python的Web应用开发实战》笔记一-创新互联
分享地址:http://myzitong.com/article/digice.html