Flask应用的基本结构·快速入门Flask

1.初始化

所有Flask应用都必须创建一个应用实例。Web服务器使用一种名为Web服务器网关接口(WSGI,Web server gateway interface,读作“wiz-ghee”)的协议,把接收自客户端的所有请求都转交给这个对象处理。应用实例是Flask类的对象,通常由下述代码创建:

from flask import Flask

app = Flask(__name__)

2.路由和视图函数

在Flask应用中定义路由的最简便方式,是使用应用实例提供的app.route装饰器。下面的例子说明了如何使用这个装饰器声明路由:

@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'

带有参数的路径使用:

@app.route('/user/<name>')
def user(name):
    return '{}'.format(name)

例如:访问路径

http://127.0.0.1:5000/user/dahe

在这里插入图片描述

还可以指定某一个数据类型的路径信息:

@app.route('/user/<int:id>')
def user(id):
    return '{}'.format(id)

Flask支持在路由中使用string、int、float和path类型。path类型是一种特殊的字符串,与string类型不同的是,它可以包含正斜线


3.Web开发服务器

Flask应用自带Web开发服务器,通过flask run命令启动

没有flask命令的旧版Flask中,若想启动应用,要运行应用的主脚本。主脚本的尾部包含下述代码片段:

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

4.调试模式

Flask应用可以在调试模式中运行。在这个模式下,开发服务器默认会加载两个便利的工具:重载器和调试器。

启用重载器后,Flask会监视项目中的所有源码文件,发现变动时自动重启服务器。在开发过程中运行启动重载器的服务器特别方便,因为每次修改并保存源码文件后,服务器都会自动重启,让改动生效。

调试器是一个基于Web的工具,当应用抛出未处理的异常时,它会出现在浏览器中。此时,Web浏览器变成一个交互式栈跟踪,你可以在里面审查源码,在调用栈的任何位置计算表达式。

若想以编程的方式启动调试模式,可以通过如下方式启动flask项目:

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

千万不要在生产服务器中启用调试模式!❌


5.请求–响应循环

应用和请求上下文

为了避免大量可有可无的参数把视图函数弄得一团糟,Flask使用上下文临时把某些对象变为全局可访问。有了上下文,便可以像下面这样编写视图函数来判断用户的来源浏览器:

from flask import Flask, request

@app.route('/')
def hello_world():
    user_agent = request.headers.get('User-Agent')
    return 'Hello World Dahe!{}'.format(user_agent)

输出如下:

Hello World Dahe!Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36

在Flask中有两种上下文:应用上下文和请求上下文:

在这里插入图片描述

flask所有请求对象:

在这里插入图片描述

响应

如果视图函数返回的响应需要使用不同的状态码,可以把数字代码作为第二个返回值,添加到响应文本之后。例如,下述视图函数返回400状态码,表示请求无效:

from flask import Flask, request

@app.route('/')
def hello_world():
    user_agent = request.headers.get('User-Agent')
    return 'Hello World Dahe!{}'.format(user_agent), 400

下例创建一个响应对象,然后设置cookie:

from flask import make_response

@app.route('/')
def index():
    response = make_response('<h1>This document carries a cookie!</h1>')
    response.set_cookie('yours', '1314')
    return response

响应对象最常使用的属性和方法:

在这里插入图片描述

特殊响应

重定向

Flask提供了redirect()辅助函数,用于生成这种响应:

from flask import Flask, redirect

@app.route('/')
def hello_world():
    return redirect('https://www.baidu.com/')

异常

还有一种特殊的响应由abort()函数生成,用于处理错误

@app.route('/user/<int:id>')
def user(id):
    if id == 1:
        abort(404)
    return '{}'.format(id)

此时访问如下路径,会发生如下错误:

http://127.0.0.1:5000/user/1

在这里插入图片描述


版权声明:本文为Gherbirthday0916原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。