基于声明字典的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/>;
[![构建状态](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/>;