烧瓶应用的各种实用工具的分类
FlaskWarts的Python项目详细描述
烧瓶是一组实用程序类和函数,用于使 克服一些在发育过程中经常遇到的疣 烧瓶应用。它被称为“疣”,因为“utils”被拿走了。主要 包仍然被称为utils,因为这是它在一些 应用程序作者正在使用中的代码,并且懒得全部重构它们。
概述
库不太通用。事实上,这是相当自以为是的。它是做的 如果你想用的话可以用,但主要是给作者的 用例。
虽然不是一个直接的目标,但作者的意图是 在某一点上完全展开烧瓶,而且更灵活。可能是 也可以分解成多个独立的库。目前,它是 多用途库,希望您将站点组织为单个 应用程序并广泛使用flask.current_app。虽然这不是一个 一般来说,这是一个很好的模式(暂时)。
它还希望您将配置放在app.config中。
注意,并不是所有的代码都是完全开发和测试的。一些代码甚至 缺少单元测试,文档不存在。所以这差不多 前置Alpha软件。另外,不要期望在 任何形式。
功能
实用程序具有以下功能:
- 基于类的路由处理程序(utils.routes)
- 使用formencode(utils.forms)进行表单处理
- csrf中间件(utils.middlewares)
- 基本时区操作支持(utils.timezone)
- 一个用于拒绝非xhr请求的装饰器(utils.decorators)
安装
或者:
easy_install FlaskWarts
或:
pip install FlaskWarts
基于类的路由处理
现在请看消息来源。更详细的文件计划在未来 释放。这和Django的CBV很相似,但不完全一样。
简单示例:
from flask import render_template from utils.routes import Route class MyRoute(Route): path = '/my' def GET(self): return render_template('foo.html')
方法名对应于http方法,以及任何位置或关键字 路径中的参数作为位置参数和关键字参数传递给 方法。此外,positional和keyword参数可以作为 self.args和self.kwargs,分别是list和dict。
方法将返回一个响应,就像普通的flask路由处理程序一样 功能。
默认情况下,通过_method请求支持http方法重写 所有post请求的参数,并且Route类智能地映射 将它们转换为正确的实例方法。它在 这样你就不用担心了。您可以通过以下方式禁用此行为: 在子类中将allow_overrides属性设置为False。
Route类的许多子类实现了不同的 用于表单处理和模板呈现等常见任务的接口。一些 其中实现了多个http方法。现在你得看看 更多信息来源。
通过调用register()类方法并传递 它是一个应用程序对象:
MyRoute.register(app)
可以使用name属性显式指定路由名称。 否则,它是从类名中通过对其进行非熔化而派生出来的。例如, MyRoute的名称是my_route。Foo的名称为foo,依此类推 打开。
如果将路由组织到模块中(例如,在 单模块),可以批量注册。
from utils.routes import register_module register_module(app, 'myapp.routes')
register_module()函数将注册任何具有 register()和get_route_name()属性,其路径属性为 不是None。一般来说,这是一套足够好的规则,可以覆盖所有路线, 但是如果你有意外满足条件的对象,函数 会尝试注册的,所以要小心。
如果要显式排除路由,可以使用exclude参数。 这个论点应该是一个不可辩驳的论点。类或路由名的Ining名称。
例如:
register_module(app, 'myapp.routes', exclude=['Test', 'mickey_mouse'])
以上不包括类Test和MickeyMouse。
使用formencode进行表单处理
允许使用formencode的htmlfill_schemabuilder进行基本表单验证。 医生在路上,请继续关注。
CSRF中间件
目前有点粗糙,但有效。对随机数使用os.urandom。 一代人,你被警告了。这也使得Jinja2成为一个需求。
基本用法如下:
from utils.middlewares import csrf csrf(app)
在模板中:
<form method="POST"> {{ csrf_tag }} ... </form>
医生?谁说了医生的事?:d
时区操作
需要pytz。同样,还没有文档,所以请查看模块。
装饰工
要防止对端点的非XHR请求,请执行以下操作:
from utils.decorators import xhr_only @app.route('/') @xhr_only def my_view(): pass
它将中止状态为http 400的非xhr请求。