使烧瓶开发更加容易
flask-easymode的Python项目详细描述
#烧瓶易于制作[构建状态](https://travis-ci.org/petermilias/flask-easymode.png?branch=master)"(https://travis-ci.org/petermilias/flask-easymode)[![覆盖状态](https://coveralls.io/repos/petermilias/flask-easymode/badge.png?branch=master)"(https://coveralls.io/r/petermilias/flask-easymode?branch=master)[![下载](https://pypip.in/d/flask easymode/badge.png)(https://crate.io/packages/flask-easymode)[![下载](https://pypip.in/v/flask easymode/badge.png)(https://crate.io/packages/flask easymode)
\应用程序。
它主要关注web api模式,并查看<;-->;模型数据处理
通常不会经常更改的模式,有时会非常重复
。
假设
没有关于api提供的任何特性的应用。
一般来说,您需要注册blinker recipient函数
,以便定义特定于应用程序的行为。
这有一个令人愉快的
效果,即高效、轻量级和分离。
我努力将各种功能模块化并加以分解,以便
这个包仍然遵循Flask及其扩展的"可选"理念。
因此,`` init-app()``确实几乎什么都没有,直到您开始启用特定的
功能,这些功能将开始接触配置变量和应用程序上下文堆栈。
大部分功能都包含在mixin、helpers和decorators中,这些功能必须在功能启用后导入。显然,有一些
组件可以直接使用,并且不与特定功能绑定。
这些mixin
可以简单地导入,并与连烧瓶本身分开使用。
也就是说,在启用之前,不要尝试使用依赖于
可选启用功能的装饰器和/或帮助器。在某些情况下,他们会忽略你,在其他情况下,他们会抛出错误。
\features
*查看模型的函数依赖注入(到目前为止最酷的功能)
*全自动XHR API模式(错误处理、数据序列化,
*完全抽象的crud混合(例如在wiki中使用sqlalchemy)
*有用的视图助手函数,如```redirect_self()``和``redirect_next()```
要知道,这里使用信号的要点是可以附加任何所需的查找系统。完全抽象。
`` python
easymode无法神奇地知道您希望将可注射模型保存在何处
如果您有一个要用备用名称标识的类,请执行以下操作:
em.a d d廑injectable(user,alt='uzer')
如果在实际注入阶段出现,它们都将触发同一类的加载。在某些异常情况下,这实际上是需要的行为。
_已注入。通过(用户)连接
def lookup\u user(cls,conditions,**kwargs)
query=session.query(cls)
对于attr,条件中的值:
query.filter(getattr(cls,attr)==value)
返回query.first()
或redis
或cassandra
或软盘
设置路由
@app.route('/user/edit/<;user\name>;')
@inject('user')
def user_edit():
return g.user.name用户被自动分配给g对象(除非关闭该功能)
想象一下,您现在可以删除的所有代码,因为您不必从"视图参数"中查找模型。
帕拉姆斯当然是合并行为。
……最近的"request.get-json()`"也会检查传入参数并合并。trifecta.
如果您不喜欢自动g-assignment,请改为执行以下操作:
``python
@app.route('/user/edit/<;user廑name&g t;')
@inject('user',as廑args=true)
def user廑edit(user):
返回user.name廑injects作为参数而不是全局参数,我知道很性感。
```
您可以指定无限条件。
`` python
@app.route('/users/list/<;user_name>;/<;user_age>;/<;user_eye_color>;')
@inject('user')
def users_list():
打印用户[用户,用户,用户]所有匹配的参数都假设您的查找函数实际做到了这一点。
```
可注射):通过
@app.route('/pharoah/cosis/<;埃及的pharoah_name>;')
@inject('pharoah'u of廑egrapy')
def cosis廑pharoah():
p=g.pharoah of廑egrapy
`````
=easymode()
em.init_app(app)
em.enable_xhr(app)
@app.route('/some xhr endpoint')
@xhr_api()
def xhr_endpoint():
g.xhr.data['some-data']='我想发送给客户端的数据'
flash('a super important message')
flash('a great problem',"error")
要发送给客户端"
},
"消息":[
["消息",
["超级重要消息",
["错误","一个大问题"]
]
}
'
```
用例的,这些用例将记录在wiki中。
如果您想要超级奖金5包,还包括可注射混和
和捆绑式混和。请参阅crudi mixin。
`` python
>类用户(crud):pass
;或者,如果您也希望注入类用户(crudi):pass
**kwargs:
data=kwargs.get('data')
如果数据:
o.update(**data)更新功能来自CRUD
**kwargs):
用户.初始化帐户()
用户.发送欢迎电子邮件()
Facebook.向NSA(用户)报告注册情况
t_read.connect
def read_model(model,_many=false,**kwargs:
r=none
query=session.query(model)
filters=kwargs.get('f')
[query.filter(f)for f in filters if filters]
if many:
r=query.all()
else:
r=query.first()
return r
@object u deleted.connect
def delete object(o,**Kwargs:
会话。删除(o)拥有的
user.delete()或此用户(来自CRUD)
some_other_user=user.read(filters=[user.name=='mike',user.age>;=12])read来自CRUD
user_list=user.read逖many(filters=[user.age>;=21])正如read-many(shortcuts-many=true)
内置的,您需要在crud类上定义一个
u可更新且可读的属性。这在下一个版本中是不必要的。建立数据处理的简洁而健壮的方法,因为它需要最少的代码来构建一个有效的加载和修改数据的框架。记住,所有信令都使用``**kwargs.``您可以根据需要使处理程序简单和/或
复杂。此库尝试为
使用者提供最低限度的便利,并在内部使用私有Kwarg密钥,以避免污染您的公共API空间。
fork、extend、merge、repeat!
```
\应用程序。
它主要关注web api模式,并查看<;-->;模型数据处理
通常不会经常更改的模式,有时会非常重复
。
假设
没有关于api提供的任何特性的应用。
一般来说,您需要注册blinker recipient函数
,以便定义特定于应用程序的行为。
这有一个令人愉快的
效果,即高效、轻量级和分离。
我努力将各种功能模块化并加以分解,以便
这个包仍然遵循Flask及其扩展的"可选"理念。
因此,`` init-app()``确实几乎什么都没有,直到您开始启用特定的
功能,这些功能将开始接触配置变量和应用程序上下文堆栈。
大部分功能都包含在mixin、helpers和decorators中,这些功能必须在功能启用后导入。显然,有一些
组件可以直接使用,并且不与特定功能绑定。
这些mixin
可以简单地导入,并与连烧瓶本身分开使用。
也就是说,在启用之前,不要尝试使用依赖于
可选启用功能的装饰器和/或帮助器。在某些情况下,他们会忽略你,在其他情况下,他们会抛出错误。
\features
*查看模型的函数依赖注入(到目前为止最酷的功能)
*全自动XHR API模式(错误处理、数据序列化,
*完全抽象的crud混合(例如在wiki中使用sqlalchemy)
*有用的视图助手函数,如```redirect_self()``和``redirect_next()```
要知道,这里使用信号的要点是可以附加任何所需的查找系统。完全抽象。
`` python
easymode无法神奇地知道您希望将可注射模型保存在何处
如果您有一个要用备用名称标识的类,请执行以下操作:
em.a d d廑injectable(user,alt='uzer')
如果在实际注入阶段出现,它们都将触发同一类的加载。在某些异常情况下,这实际上是需要的行为。
_已注入。通过(用户)连接
def lookup\u user(cls,conditions,**kwargs)
query=session.query(cls)
对于attr,条件中的值:
query.filter(getattr(cls,attr)==value)
返回query.first()
或redis
或cassandra
或软盘
设置路由
@app.route('/user/edit/<;user\name>;')
@inject('user')
def user_edit():
return g.user.name用户被自动分配给g对象(除非关闭该功能)
想象一下,您现在可以删除的所有代码,因为您不必从"视图参数"中查找模型。
帕拉姆斯当然是合并行为。
……最近的"request.get-json()`"也会检查传入参数并合并。trifecta.
如果您不喜欢自动g-assignment,请改为执行以下操作:
``python
@app.route('/user/edit/<;user廑name&g t;')
@inject('user',as廑args=true)
def user廑edit(user):
返回user.name廑injects作为参数而不是全局参数,我知道很性感。
```
您可以指定无限条件。
`` python
@app.route('/users/list/<;user_name>;/<;user_age>;/<;user_eye_color>;')
@inject('user')
def users_list():
打印用户[用户,用户,用户]所有匹配的参数都假设您的查找函数实际做到了这一点。
```
可注射):通过
@app.route('/pharoah/cosis/<;埃及的pharoah_name>;')
@inject('pharoah'u of廑egrapy')
def cosis廑pharoah():
p=g.pharoah of廑egrapy
`````
=easymode()
em.init_app(app)
em.enable_xhr(app)
@app.route('/some xhr endpoint')
@xhr_api()
def xhr_endpoint():
g.xhr.data['some-data']='我想发送给客户端的数据'
flash('a super important message')
flash('a great problem',"error")
要发送给客户端"
},
"消息":[
["消息",
["超级重要消息",
["错误","一个大问题"]
]
}
'
```
如果您想要超级奖金5包,还包括可注射混和
和捆绑式混和。请参阅crudi mixin。
`` python
>类用户(crud):pass
;或者,如果您也希望注入类用户(crudi):pass
**kwargs:
data=kwargs.get('data')
如果数据:
o.update(**data)更新功能来自CRUD
**kwargs):
用户.初始化帐户()
用户.发送欢迎电子邮件()
Facebook.向NSA(用户)报告注册情况
t_read.connect
def read_model(model,_many=false,**kwargs:
r=none
query=session.query(model)
filters=kwargs.get('f')
[query.filter(f)for f in filters if filters]
if many:
r=query.all()
else:
r=query.first()
return r
@object u deleted.connect
def delete object(o,**Kwargs:
会话。删除(o)拥有的
user.delete()或此用户(来自CRUD)
some_other_user=user.read(filters=[user.name=='mike',user.age>;=12])read来自CRUD
user_list=user.read逖many(filters=[user.age>;=21])正如read-many(shortcuts-many=true)
内置的,您需要在crud类上定义一个
u可更新且可读的属性。这在下一个版本中是不必要的。建立数据处理的简洁而健壮的方法,因为它需要最少的代码来构建一个有效的加载和修改数据的框架。记住,所有信令都使用``**kwargs.``您可以根据需要使处理程序简单和/或
复杂。此库尝试为
使用者提供最低限度的便利,并在内部使用私有Kwarg密钥,以避免污染您的公共API空间。
fork、extend、merge、repeat!
```