当前位置: 首页 > 文档资料 > Flask 中文文档 >

API

优质
小牛编辑
135浏览
2023-12-01

这部分文档涵盖了 Flask 的所有接口。对于那些 Flask 依赖外部库的部分,我们这里提供了最重要的部分的文档,并且提供其官方文档的链接。

应用对象

蓝图对象

进入的请求对象

class flask.request

会话

如果你设置了 Flask.secret_key ,你可以在 Flask 应用中使用会话。会话主要使得在请求见保留信息成为可能。 Flask 的实现方法是使用一个签名的 cookie 。这样,用户可以查看会话的内容,但是不能修改它,除非用户知道密钥。所以确保密钥被设置为一个复杂且无法被容易猜测的值。

你可以使用 session 对象来访问当前的会话:

class flask.session 0.8 新版功能

会话接口提供了简单的途径来替换 Flask 正在使用的会话实现。

Notice

PERMANENT_SESSION_LIFETIME 配置键从 Flask 0.8 开始可以是一个整数。你可以自己计算值,或用应用上的permanent_session_lifetime 属性来自动转换结果为一个整数。

测试客户端

应用全局变量

只在一个请求内,从一个函数到另一个函数共享数据,全局变量并不够好。因为这在线程环境下行不通。 Flask 提供了一个特殊的对象来确保只在活动的请求中有效,并且每个请求都返回不同的值。一言蔽之:它做正确的事情,如同它对 requestsession 做的那样。

flask.g
flask.current_app

JSON 支持

Flask 使用 simplejson 来实现JSON。自从 simplejson 既在标准库中提供也在 Flask 的拓展中提供。Flask将首先尝试自带的simplejson,如果失败了就使用标准库中的json模块。除此之外,为了更容易定制它还会委托访问当前应用的JSON的编码器和解码器。

所以首先不要这样用:

try:
  import simplejson as json
except ImportError:
  import json

你可以这样

from flask import json

For usage examples, read the json documentation.

关于更多的用法,请阅读标准库中的 json 文档。下面的拓展已经默认被集成到了标准库中JSON模块里:

  1. datetime 对象被序列化为 RFC 822 字符串。
  2. 任何带有 __html__ 方法(比如 Markup)将在序列化的时候
    调用这个方法然后返回的字符串将会被序列化为字符串。

这个 htmlsafe_dumps() 方法也能在 Jinja2 的过滤器中使用,名字为|tojson 。请注意在 script 标签内部的内容将不会被转义,所以如果你想在script 内部使用的话请确保它是不可用的通过 |safe 来转义,除非你正在使用 Flask 0.10,如下:

<script type=text/javascript>
    doSomethingWith({{ user.username|tojson|safe }});
</script>

模板渲染

配置

扩展

flask.ext

有用的内构件

flask._request_ctx_stack 0.6 新版功能.

flask.signals_available 0.7 新版功能.

URL 路由注册

在路由系统中定义规则可以的方法可以概括为三种:

  1. 使用 flask.Flask.route() 装饰器
  2. 使用 flask.Flask.add_url_rule() 函数
  3. 直接访问暴露为 flask.Flask.url_map 的底层的 Werkzeug 路由系统

路由中的变量部分可以用尖括号指定( /user/<username>)。默认情况下,URL 中的变量部分接受任何不带斜线的字符串,而 <converter:name> 也可以指定不同的转换器。

变量部分以关键字参数传递给视图函数。

下面的转换器是可用的:

string接受任何不带斜线的字符串(默认的转换器)
int接受整数
floatint ,但是接受浮点数
path和默认的相似,但也接受斜线

这里是一些例子:

@app.route('/')
def index():
    pass

@app.route('/<username>')
def show_user(username):
    pass

@app.route('/post/<int:post_id>')
def show_post(post_id):
    pass

需要注意的一个重要细节是 Flask 处理结尾斜线的方式。你可以应用下面两个规则来保证 URL 的唯一:

  1. 如果规则以斜线结尾,当用户以不带斜线的形式请求,用户被自动重定向到带有结尾斜线的相同页面。
  2. 如果规则结尾没有斜线,当用户以带斜线的形式请求,会抛出一个 404 notfound 。

这与 web 服务器处理静态文件的方式一致。这使得安全地使用相对链接地址成为可能。

你可以为同一个函数定义多个规则。无论如何,他们也要唯一。也可以给定默认值。这里给出一个接受可选页面的 URL 定义:

@app.route('/users/', defaults={'page': 1})
@app.route('/users/page/<int:page>')
def show_users(page):
    pass

这指定了 /users/ 为第一页的 URL ,/users/page/N 为第 N 页的 URL 。

以下是 route()add_url_rule()接受的参数。两者唯一的区别是,带有路由参数的视图函数用装饰器定义,而不是view_func 参数。

ruleURL 规则的字符串
endpoint注册的 URL 规则的末端。如果没有显式地规定,Flask 本身假设
末端的名称是视图函数的名称,。
view_func当请求呈递到给定的末端时调用的函数。如果没有提供,可以
在用在 view_functions 字典中以末端
作为键名存储,来在之后设定函数。
defaults规则默认值的字典。上面的示例介绍了默认值如何工作。
subdomain当使用子域名匹配的时候,为子域名设定规则。如果没有给定,假
定为默认的子域名。
**options这些选项会被推送给底层的 Rule
对象。一个 Werkzeug 的变化是 method 选项的处理。methods是
这个规则被限定的方法列表( GETPOST 等等)。默认情
况下,规则只监听 GET (也隐式地监听 HEAD )。从 Flask
0.6 开始,OPTIONS 也被隐式地加入,并且做标准的请求处理。
它们需要作为关键字参数来给定。

视图函数选项

对内部使用,视图函数可以有一些属性,附加到视图函数通常没有控制权的自定义的行为。下面的可选属性覆盖 add_url_rule() 的默认值或一般行为:

  • __name__: 函数的名称默认用于末端。如果显式地提供末端,这个值会使用。此外,它默认以蓝图的名称作为前缀,并且不能从函数本身自定义。
  • methods: 如果没有在添加 URL 规则时提供 methods 参数。 Flask 会在视图函数对象上寻找是否存在 methods 属性。如果存在,它会从上面拉取方法的信息。
  • provide_automatic_options: 如果设置了这个属性, Flask 会强制禁用或启用 HTTP OPTIONS 响应的自动实现。这对于对单个视图自定义 OPTIONS响应而使用装饰器的情况下是有用的。
  • required_methods: 如果这个属性被设置了, 当注册一个 URL 规则的时候,Flask 将总是会添加这些 methods 即使 methods 参数在 route() 调用的时候被显式的覆盖了。

完整的例子:

def index():
    if request.method == 'OPTIONS':
        # custom options handling here
        ...
    return 'Hello World!'
index.provide_automatic_options = False
index.methods = ['GET', 'OPTIONS']

app.add_url_rule('/', index)

0.8 新版功能:加入了 provide_automatic_options 功能。