烧瓶应用的各种实用工具的分类

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.argsself.kwargs,分别是list和dict。

方法将返回一个响应,就像普通的flask路由处理程序一样 功能。

默认情况下,通过_method请求支持http方法重写 所有post请求的参数,并且Route类智能地映射 将它们转换为正确的实例方法。它在 这样你就不用担心了。您可以通过以下方式禁用此行为: 在子类中将allow_overrides属性设置为False

Route类的许多子类实现了不同的 用于表单处理和模板呈现等常见任务的接口。一些 其中实现了多个http方法。现在你得看看 更多信息来源。

通过调用register()类方法并传递 它是一个应用程序对象:

MyRoute.register(app)

可以使用name属性显式指定路由名称。 否则,它是从类名中通过对其进行非熔化而派生出来的。例如, MyRoute的名称是my_routeFoo的名称为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'])

以上不包括类TestMickeyMouse

使用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请求。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java AnimatedVectorDrawable支持库和“pathData”动画   java Qt Jambi:QistTractListModel未显示在QListView中   单击按钮时清除共享首选项   java线程池大小应该远大于内核数+1   linux编译错误java hadoop程序   java不包括findBugs发现的bug   SpringJava。lang.NoClassDefFoundError:org。阿帕奇。贾斯珀。埃尔。ELContextImpl(初始化失败)   使用AVL树的java字典数组   java如何使用数组数据执行jsoup请求?Jsoup使用数组数据发布请求并从php服务器获取json   java jdbc在sql server 2008 r2上存储的png图像提供了不完整的数据   java坏路径警告,它来自哪里?   java从HashMap<String,ArrayList<String>>   java HttpSolrserver已被弃用,无法让HttpSolrClient毫无例外地工作   java如何使用坐标很少的仿射变换?   java在JaxRs中存储会话对象