使烧瓶开发更加容易

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!

```

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

推荐PyPI第三方库


热门话题
java Spring freemarker多模板加载程序路径   在java插件中从控制台获取输入   java在包中创建继承类   网页抓取Java Jsoup网页抓取   java在线程内创建一个对象,而true条件具有相同的引用   java如何根据空格数拆分字符串   java新的安卓 studio更新中的配置文件“app”是什么?   java在将ArrayList写入/读取到文件时出现奇怪的问题   java Reg替换文本块第一次出现+最后一次出现   java当我单击任何RecyclerView列表项时,如何在MainActivity的EditText中显示特定的单击项?   JAVA XML删除节点仅删除第一个外观   java如何在数组中查找特定值   java SVG/矢量图形对象布尔运算(并集、交集、减法)   java在Android中创建线程需要多长时间   尝试从JBOSS联系Oracle LDAP服务器时发生java连接重置异常   java基于参数获取特定的实现实例   使用java就地修改文件内容   java MonetaryException:未加载MonetaryAmountsSingletonSpi   java接受用户的不同输入并使其触发完全相同的代码段的最短方法是什么   Spring 3.2.8应用程序中未找到java HTTP 404错误