衡水哪里可以做网站,wordpress google 360,安徽建设工程招标投标信息网,吴中区企业网络推广Flask简介 安装概述使用PyCharm创建一个Flask程序 Flask程序的基本结构初始化路由和视图函数启动服务器请求-响应循环 安装
概述
Flask算是小型框架#xff0c;小到可以称为“微框架”。Flask 非常小#xff0c;因此你一旦能够熟练使用它#xff0c;很可能就能读懂它所有的… Flask简介 安装概述使用PyCharm创建一个Flask程序 Flask程序的基本结构初始化路由和视图函数启动服务器请求-响应循环 安装
概述
Flask算是小型框架小到可以称为“微框架”。Flask 非常小因此你一旦能够熟练使用它很可能就能读懂它所有的源码。但是小并不意味着它比其他框架的功能少。Flask 自开发伊始就被设计为可扩展的框架它具有一个包含基本服务的强健核心其他功能则可通过扩展实现。你可以自己挑选所需的扩展包组成一个没有附加功能的精益组合从而完全精确满足自身需求
使用PyCharm创建一个Flask程序
1、打开PyCharm选择“Create New Project”然后选择一个合适的位置并命名你的项目。点击“Create”来创建项目。建议在项目中创建一个虚拟环境以隔离项目的依赖 2、PyCharm会自动下载flask包创建venv虚拟环境并完成初始模版的构建如下图 之后的开发如果你想在虚拟环境中执行命令只需点击TerminalPyCharm会自动进入项目下面的venv虚拟环境 Flask程序的基本结构
初始化
所有 Flask 程序都必须创建一个程序实例。Web 服务器使用一种名为 Web 服务器网关接口Web Server Gateway InterfaceWSGI的协议把接收自客户端的所有请求都转交给这个对象处理。程序实例是 Flask 类的对象经常使用下述代码创建
from flask import Flaskapp Flask(__name__)Flask 类的构造函数只有一个必须指定的参数即程序主模块或包的名字。在大多数程序中Python 的 __name__ 变量就是所需的值。Flask 用这个参数决定程序的根目录以便稍后能够找到相对于程序根目录的资源文件位置
路由和视图函数
在 Flask 程序中定义路由的最简便方式是使用程序实例提供的 app.route 修饰器把修饰的函数注册为路由例如
app.route(/)
def hello_world():return Hello World!启动服务器
程序实例用 run 方法启动 Flask 集成的开发 Web 服务器
if __name__ __main__:app.run()有一些选项参数可被 app.run() 函数接受用于设置 Web 服务器的操作模式。在开发过程中启用调试模式会带来一些便利比如说激活调试器和重载程序。要想启用调试模式我们可以把 debug 参数设为 True
if __name__ __main__:app.run(debugTrue)右键运行Flask项目控制台会输出项目的地址信息 访问http://127.0.0.1:5000/会看到一个初始的Flask应用程序返回一个Hello World! 一个完整的程序
from flask import Flaskapp Flask(__name__)app.route(/)
def hello_world():return Hello World!if __name__ __main__:app.run(debugTrue)请求-响应循环
1、程序和请求上下文
Flask 从客户端收到请求时要让视图函数能访问一些对象这样才能处理请求。请求对象就是一个很好的例子它封装了客户端发送的 HTTP 请求 要想让视图函数能够访问请求对象一个显而易见的方式是将其作为参数传入视图函数不过这会导致程序中的每个视图函数都增加一个参数。除了访问请求对象如果视图函数在处理请求时还要访问其他对象情况会变得更糟。为了避免大量可有可无的参数把视图函数弄得一团糟Flask 使用上下文临时把某些对象变为全局可访问。有了上下文就可以写出下面的视图函数
from flask import Flask, requestapp Flask(__name__)app.route(/)
def index():user_agent request.headers.get(User-Agent)return fpYour browser is {user_agent}/pif __name__ __main__:app.run(debugTrue)在 Flask 中有两种上下文程序上下文和请求上下文
在程序上下文中你可以访问应用程序的全局变量比如 current_app当前应用程序实例和 g用于存储每个请求中的临时数据在请求上下文中你可以访问请求相关的全局变量比如 request代表当前请求对象、session用于存储用户会话数据等
2、请求调度
程序收到客户端发来的请求时要找到处理该请求的视图函数。为了完成这个任务Flask会在程序的 URL 映射中查找请求的 URL。URL 映射是 URL 和视图函数之间的对应关系 Flask 使用 app.route 修饰器或者非修饰器形式的 app.add_url_rule() 生成映射
3、请求钩子
有时在处理请求之前或之后执行代码会很有用。例如在请求开始时我们可能需要创建数据库连接或者认证发起请求的用户。为了避免在每个视图函数中都使用重复的代码Flask 提供了注册通用函数的功能注册的函数可在请求被分发到视图函数之前或之后调用 请求钩子使用修饰器实现。Flask 支持以下 4 种钩子
注册一个函数在处理第一个请求之前运行。before_first_request注册一个函数在每次请求之前运行。before_request注册一个函数如果没有未处理的异常抛出在每次请求之后运行。after_request注册一个函数即使有未处理的异常抛出也在每次请求之后运行。teardown_request
4、响应
Flask 调用视图函数后会将其返回值作为响应的内容 HTTP 协议需要的不仅是作为请求响应的字符串。HTTP 响应中一个很重要的部分是状态码Flask 默认设为 200这个代码表明请求已经被成功处理 如果视图函数返回的响应需要使用不同的状态码那么可以把数字代码作为第二个返回值添加到响应文本之后例如返回404
app.route(/)
def index():user_agent request.headers.get(User-Agent)return fpYour browser is {user_agent}/p, 404视图函数返回的响应还可接受第三个参数这是一个由首部header组成的字典可以添加到 HTTP 响应中例如下例创建了一个响应对象然后设置了 cookie
app.route(/)
def index():response make_response(h1This document carries a cookie!/h1)response.set_cookie(answer, 42)return response重定向经常使用 302 状态码表示指向的地址由 Location 首部提供。重定向响应可以使用 3 个值形式的返回值生成也可在 Response 对象中设定。不过由于使用频繁Flask 提供了 redirect() 辅助函数用于生成这种响应
app.route(/)
def index():return redirect(https://www.baidu.com)5、Flask扩展
Flask 被设计为可扩展形式故而没有提供一些重要的功能例如数据库和用户认证 社区成员开发了大量不同用途的扩展如果这还不能满足需求你还可使用所有Python 标准包或代码库