基于声明字典的python模型类

micromodels-ng的Python项目详细描述


#微型模型

[![构建状态](https://secure.travis ci.org/j4mie/micromodels.png)(http://travis ci.org/zbyte64/micromodels)

基于web的api。

**作者**:jamie matthews(<;https://github.com/j4mie>;)和eric martin(<;https://github.com/lightcatcher>;)以及jason kraus(<;https://github.com/zbyte64>;).

安装


非常简单的示例

出生日期=微模型。日期字段(格式="%y-%m-%d")

@property
def完整名称(self):
return"%s%s"%(self.first\u name,self.last\u name)


douglas数据={
"first\u name":"douglas",
"last\u name":"adams",
"出生日期":"1952-03-11",
}


douglas=author.from_dict(douglas_data)
print"%s出生于%s"%(douglas.full_name,douglas.date_birth.strftime("%y")


=micromodels.charfield()
name=micromodels.charfield()
description=micromodels.charfield()

def get_profile_url(self):
返回http://twitter.com/%s%self.screen_name


class tweet(micromodels.model):
id=micromodels.integerfield()
text=micromodels.charfield()
创建时间=micromodels.datetimefield(格式="%a%b%d%h:%m:%s+0000%y")
user=micromodels.modelfield(twitteruser)


json数据=urlopen('http://api.twitter.com/1/statuses/show/20.json').read()
tweet=tweet.from_dict(json_数据,is_json=true)


print tweet.user.name
print tweet.user.get_profile_url()
print tweet.id
print tweet.created_at.strftime('%a')

序列化

tweet.add戋field('retweet戋count',44,micromodels.integerfield())
print tweet.retweet戋count

序列化)
打印tweet.to_json()

tweet.to_json()等同于此调用
json.dumps(tweet.to_dict(serial=true))



####` source`

默认情况下,模型类将在其源数据中查找与其每个字段同名的键。例如:

class example model(micromodels.model):
myfield=micromodels.charfield()

>;>e=examplemodel({'myfield':'some value'})
>;>e.myfield
u'some value'

您可以将"source"参数传递给每个字段实例:


Class ExampleModel(micromodels.model):
MyField=micromodels.charField()
AnotherField=micromodels.charField(source='some砦other砦field')

>;>;e=示例模型({'myfield':'some value','some戥other戥field':'other value'})
>;>e.其他字段
u'other value'


basefield

数据字典中没有任何更改。


\charfield

**将尝试将其提供的数据转换为Unicode.*



35 35 35 35 35

试图将其提供的数据转换为整数。





35 35 35 35 35 35 35 35 35 \试图将其提供的数据转换为布尔值。如果数据是字符串,"true"(不区分大小写)将转换为"true",所有其他字符串将转换为"false"。如果提供的数据是整数,则正数将变为"true",负数或零将变为"false"。




mymodel类(micromodels.model):
created_at=micromodels.datetimefield()

可以提供可选格式。

m y model类(micromodels.model):
created_at=micromodels.datetimefield(format="%a%b%d%h:%m:%s+0000%y")


有关格式字符串的详细信息,请参阅[python
文档](http://docs.python.org/library/datetime.html\strftime strptime behavior)
。例如:

datefield


作为
`iso8601`或使用选项"format"参数(有关详细信息,请参见"datetimefield"。


它接受一个必需的参数,该参数是用于转换列表中每个项的字段类型。例如:

一些数据={
"第一个列表":[0,34,42],
"第二个列表":["第一个列表","第二个列表","第三个列表"],
}


mymodel类(micromodels.model):
第一个列表=micromodels.fieldcollectionfield(micromodels.integerfield)
第二个列表=微模型。fieldcollectionfield(micromodels.charfield)

>;>m=我的模型(一些数据)
>;>m.第一个列表
[0,34,42]
>;>m.第二个列表
[u'第一个项目',u'第二个项目',u"第三项"]

modelfield

它接受一个必需的参数,即嵌套类。例如,给定以下字典:

some嫒data={
'first嫒item':'some value',
'second嫒item':{
'nested嫒item':'some nested value',
},
}

首先是内部嵌套模型:

类MyNestedModel(microModels.model):
嵌套项=microModels.charfield()

类MyMainModel(microModels.model):
第一个项=microModels.charfield()
第二个项=microModels.modelfield(MyNestedModel)#传递嵌套模型的类

,然后您可以按如下方式访问数据:

>;>m=mymainmodel(some廑data)
>;>m.first廑item
u'some value'
>;>m.second廑item.\uu class廑uu name廑uu
'mynestedmodel'
>;>m.second_item.nested_item
u'some nested value'

`modelfield'接受可选的"related_name"参数。
`related庘name`是相关模型用来引用外部模型的名称:


class person(model):
name=charfield()
car=modelfield(car,related庘name="owner")

class car(model):
make=charfield()
model=charfield()

>;>person=person.from_dict(某些_u数据)
>;>person.car.owner==person
true

\modelcollectionfield

它接受一个必需的参数,即列表中每个项都应转换为的嵌套类的名称
。例如:

some_data={
'list':[
{'value':'first value'},
{'value':'second value'},
{'value':'third value'},
]
}


class mynestedmodel(micromodels.model):
value=micromodels.charfield()

class mymainmodel(micromodels.model):
list=micromodels.modelcollectionfield(mynestedmodel)

>;>m=mymainmodel(一些数据)
>>>>len(m.list)
3
>>>m.list[0]。\u class\u name\u
"MyNestedModel"
>>>m.list[0].value
u"第一个值"
>;[m.list中项目的项目值]
[u"第一个值",u"第二个值",u"第三个值"]

`modelcollectionfield`接受一个可选的"related_name"参数,该参数的作用与使用"modelfield"的作用相同。


(un)license

发布、使用、编译、销售或分发本软件,以源代码形式或编译二进制文件的形式,用于任何目的、商业或非商业目的,并通过任何方式。

本软件的作者将本软件的任何和所有版权归为公共领域。我们这样做是为了广大公众的利益,也是为了我们的继承人和继承人的利益。我们打算将此承诺作为一项公开的行为,永久放弃版权法下对本软件的所有现有和未来权利。


本软件按"原样"提供,无任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他诉讼中,由软件或软件的使用或其他交易引起的、由软件引起的或与之相关的。


有关详细信息,请参阅<;http://unlicense.org/>;

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

推荐PyPI第三方库


热门话题
交换数组中重复值的位置(Java)   java搜索使用百分比匹配Elasticsearch SpringBoot中的文本   java Spring JPA和按输入字段排序   java我在输入CSV时出错了   java如何在RecyclerView中精确显示5项   使用java安全吗。util。servlet中的计时器?   使用Cp1252编码的java比较字符串   javafx打包java桌面应用程序,并引用开源许可证   java Spring和Camel CXF在战争中表现出色   java当EJB客户端失去与应用服务器的连接时,是否存在可以捕获的异常?   更改字符串值的java注释   java如何在sharedperfernce中保存自定义数组列表   RequestResponseLink:当使用java客户端读取队列时,Azure服务总线上RequestResponseLink到“$cbs”的内部发送链接因错误而关闭