【Flask学习】1.1个程序的基本结构

1.一个完整的程序

学习一门系统开发语言,我们可以通过1个最基本结构的程序,来了解程序的运行逻辑。有句俗语:“麻雀虽小,五脏俱全”。
程序例子如下(hello.py):
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
	return '<h1>Hello, Everyone.</h1>'

if __name__ == '__main__':
	app.run(debug=True)

在命令行窗口运行python hello.py,即启动了1个后台程序,但是此时的host和port没有指定,使用默认的127.0.0.1和5000。启动的程序会进入轮询,等待并处理请求。如果要停止程序,可按Ctrl-C停止。
启动程序
此时,如果在浏览器输入http://127.0.0.1:5000/并enter,即向该程序发送了请求,程序定位到index处理函数并返回html文本,最后浏览器进行渲染展示。
下面对这个demo程序,进行简单的说明

1.1初始化

所有Flask程序都必须创建一个程序实例,而程序实例就是1个Flask类初始化后的对象
web服务器使用web服务器网关接口(WSGI)协议,把来自客户端的所有请求都转交给这个对象处理。

大多数时候,我们使用以下代码创建程序实例,Flask类的构造函数只有1个必须指定的参数,即程序主模块或包的名字

app = Flask(__name__)

Flask用__name__这个参数决定程序的根目录,以便能够找到相对于程序根目录的资源文件位置。

1.2路由和视图函数

请求通过 “客户端–发送请求–>web服务器–转发请求–>程序实例” 到达后,程序实例需要知道每个url运行哪段代码,所以保存了URL到python函数的映射关系。而处理URL和函数之间关系的程序称为路由

在Flask中,使用程序实例提供的app.route装饰器,即可把装饰的函数注册为路由。被装饰的函数如index()称为视图函数(view function),在路由中URL和视图函数是一对绑定关系。

@app.route('/')
def index():
	return '<h1>Hello, Everyone.</h1>'

在日常上网中,我们会发现很多地址包含可变部分。比如地址http://www.funny.com/{user-id},用户ID是地址中的可变部分。
Flask也支持了这种形式的URL,只需要在route装饰器使用特殊的语法。例子如下:

# 示例一
@app.route('/user/<name>')
def greet_user(name):
	return '<h1>Hello, %s.</h1>' % name

# 示例二
@app.route('/book/<int:id>')
def book_info(id):
	return '<h1>The book id is %d, and its title is Hello World.</h1>' % id

尖括号里的内容是动态的,任何能匹配静态部分的URL都会映射到这个路由上来。调用视图函数时,Flask会把动态部分作为参数传入,但是视图函数要明确写出参数名称。。。
Flask支持在路由中定义int、float和path类型,如果没有定义(代码示例一)默认使用字符串,而/book/<int:id>只会匹配动态片段id是整数的URL,path类型也是字符串,但不把斜线作为分隔符。

1.3启动服务器

观察文章开头的程序demo,可以发现:程序实例用run()即可启动Flask集成的web服务器。同时,在启动后的服务器日志中,发现了“别在生产环境中使用”的警告!使用专门的web服务器,将在后续进行探索…
在demo中,run()传入了debug=True,因为在开发过程中启用调试模式能方便查找问题。
查看run函数使用,同时支持定义host和port,函数定义有run(self, host=None, port=None, debug=None, load_dotenv=True, **options)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值