Flask基本结构(一)

来源:互联网 发布:linux挂载盘到home好吗 编辑:程序博客网 时间:2024/05/22 12:57

1。初始化

创建一个程序实例来初始化,该程序实例是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 Flaskapp = 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 mapMap([<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


1 0
原创粉丝点击