Flask基本结构(一)
2015-10-16 20:27
495 查看
1。初始化
创建一个程序实例来初始化,该程序实例是Flask类的对象。
在大多数程序中,__name__变量就是所需的值。Flask用这个参数界定程序的根目录,以便以后能够找到相对于程序根目录的资源文件位置。
2.路由和视图函数
Flask中定义路由的最简便方式,是使用程序实例提供的app.route修饰器,把修饰器的函数注册为路由。
使用修饰器把函数注册为事件的处理程序。
index()函数注册为程序根地址的处理程序,即为视图函数。。index()返回的 '<h1>Hello World!<h1>'称为响应,是客户端收到的内容。
某些URL中包含可变部分,Flask支持这种形式,只需在route修饰器中使用特殊句法即可。
尖括号中的name就是动态部分。
动态部分默认使用字符串,不过也可以类型定义。例如:/user/<int:id>
Flask支持在路由中使用int,float,和path类型。path类型也是字符串,但不把斜线视为分隔符,而不当作动态片段的一部分。
3.启动服务器
使用run方法启动Flask集成的开发Web服务器。
Flask提供的Web服务器不适合在生产环境中使用。
4.第一个完整程序
第一块是初始化,第二块是路由,第三块是启动服务器。
5.请求——响应循环
5.1 上下文
为了避免大量可有可无的参数把视图函数弄得一团糟,Flask使用上下文临时把某些对象变为全局可访问。
Flask中有两种上下文:程序上下文和请求上下文。
current_app
程序上下文 当前激活程序的程序实例
g 程序上下文处理请求时用作临时存储的对象。每次请求都会重设这个变量
request 请求上下文请求对象,封装了客户端发出的HTTP请求中的内容
session 请求上下文用户会话,用于存储请求之间需要“记住”的值的词典
5.2请求调度
程序收到客户端发来的请求时,要找到该请求的视图函数。为了完成这个任务,Flask会在程序的URL映射中查找请求的URL。URL映射是URL和视图函数之间的对应关系。
Flask使用app.route修饰器或者非修饰器形式的app.add_url_rule()生成映射。
示例代码:查看之前在hello.py生成的映射。
HEAD, OPTION, GET是三种请求方法,由路由进行处理。
5.3请求钩子
钩子函数即通用函数。
四种钩子函数:
before_first_request: 注册一个函数,在处理第一个请求之前运行。
before_request: 注册一个函数,在每次请求之前运行。
after_request: 注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
teardown_request: 注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。
在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量g。
5.4 响应
Flask调用视图函数后,会将其返回值作为响应的内容。
HTTP响应中一个很重要的部分是状态码,作为第二个返回值。第三个参数是一个由首部组成的字典。
Flask默认设为200,这个代码表明请求已经被成功处理。
状态码400,表示请求无效。
重定向响应没有页面文档,只告诉浏览器一个新地址用以加载页面。Flask提供了redirect()函数,用于生成这种响应。
重定向状态码一般为302。
还有一种特殊响应由abort函数生成,用于处理错误,返回状态码404。
注意,abort函数不会把控制权交还给调用他的函数,而是抛出异常把控制权交给Web服务器。
6.Flask扩展
Flask-Script是一个Flask扩展,为Flask程序添加了一个命令行解析器。
下述命令让Web服务器监听公共网络接口上的连接,允许通往中的其他计算机连接服务器。
创建一个程序实例来初始化,该程序实例是Flask类的对象。
from flask import Flask app = Flask(__name__)
在大多数程序中,__name__变量就是所需的值。Flask用这个参数界定程序的根目录,以便以后能够找到相对于程序根目录的资源文件位置。
2.路由和视图函数
Flask中定义路由的最简便方式,是使用程序实例提供的app.route修饰器,把修饰器的函数注册为路由。
@app.route('/') def index(): return '<h1>Hello World!<h1>'
使用修饰器把函数注册为事件的处理程序。
index()函数注册为程序根地址的处理程序,即为视图函数。。index()返回的 '<h1>Hello World!<h1>'称为响应,是客户端收到的内容。
某些URL中包含可变部分,Flask支持这种形式,只需在route修饰器中使用特殊句法即可。
@app.route('/user/<name>') def user(name): return '<h1>Hello, %s!<h1>' % name
尖括号中的name就是动态部分。
动态部分默认使用字符串,不过也可以类型定义。例如:/user/<int:id>
Flask支持在路由中使用int,float,和path类型。path类型也是字符串,但不把斜线视为分隔符,而不当作动态片段的一部分。
3.启动服务器
使用run方法启动Flask集成的开发Web服务器。
if __name__ ='__main__': app.run(debug = True)__name__== '__main__':是python的惯常用法,用以确保执行这个脚本时才启动开发Web服务器。把debug设为True启动调试模式。
Flask提供的Web服务器不适合在生产环境中使用。
4.第一个完整程序
from flask import Flask
app = Flask(__name__)
@app.route('/') def index(): return '<h1>Hello World!<h1>'
if __name__ == '__main__':
app.run(debug=True)
第一块是初始化,第二块是路由,第三块是启动服务器。
5.请求——响应循环
5.1 上下文
为了避免大量可有可无的参数把视图函数弄得一团糟,Flask使用上下文临时把某些对象变为全局可访问。
Flask中有两种上下文:程序上下文和请求上下文。
current_app
程序上下文 当前激活程序的程序实例
g 程序上下文处理请求时用作临时存储的对象。每次请求都会重设这个变量
request 请求上下文请求对象,封装了客户端发出的HTTP请求中的内容
session 请求上下文用户会话,用于存储请求之间需要“记住”的值的词典
5.2请求调度
程序收到客户端发来的请求时,要找到该请求的视图函数。为了完成这个任务,Flask会在程序的URL映射中查找请求的URL。URL映射是URL和视图函数之间的对应关系。
Flask使用app.route修饰器或者非修饰器形式的app.add_url_rule()生成映射。
示例代码:查看之前在hello.py生成的映射。
(venv) $ python >>> from hello import app >>> app.url map Map([<Rule '/' (HEAD, OPTION, GET) -> index>, <Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>, <Rule '/user/<name>' (HEAD, OPTINS, GET) -> user>])
HEAD, OPTION, GET是三种请求方法,由路由进行处理。
5.3请求钩子
钩子函数即通用函数。
四种钩子函数:
before_first_request: 注册一个函数,在处理第一个请求之前运行。
before_request: 注册一个函数,在每次请求之前运行。
after_request: 注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
teardown_request: 注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。
在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量g。
5.4 响应
Flask调用视图函数后,会将其返回值作为响应的内容。
HTTP响应中一个很重要的部分是状态码,作为第二个返回值。第三个参数是一个由首部组成的字典。
Flask默认设为200,这个代码表明请求已经被成功处理。
状态码400,表示请求无效。
重定向响应没有页面文档,只告诉浏览器一个新地址用以加载页面。Flask提供了redirect()函数,用于生成这种响应。
重定向状态码一般为302。
还有一种特殊响应由abort函数生成,用于处理错误,返回状态码404。
注意,abort函数不会把控制权交还给调用他的函数,而是抛出异常把控制权交给Web服务器。
6.Flask扩展
Flask-Script是一个Flask扩展,为Flask程序添加了一个命令行解析器。
下述命令让Web服务器监听公共网络接口上的连接,允许通往中的其他计算机连接服务器。
(venv) $ python hello.py runserver --host 0.0.0.0 *Running on http://a.b.c.d:5000/ *Restarting with reloader
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 如何使用 Flask 编写 Python Web API
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例