django的一个灵活rest框架

delicious-cake的Python项目详细描述


Delicious Cake是一个灵活的、从Tastypie派生的、用于Django的Rest框架。多年来,我使用Tastypie和活塞创建了Restful API。虽然两者都有各自的优点,但都不如老django的风景那么灵活。


为什么蛋糕好吃?
----


Delicious Cake是一个框架,它消除了创建
Restful API的许多痛苦,而不施加许多限制。


----------


Tastypie使您可以轻松地获取模型并以restful的方式快速公开它们。不幸的是,这通常不是公开api的最佳方式。有些功能在
tastype的约束下很难表达。

使项目起步所需的代码量。随着您的
项目的发展,用Tastype来表达您的
理想的API变得越来越困难。


Delicious Cake是一种尝试,它将Tastype的精华以更灵活的形式呈现出来。

快把它拿出来看看是否对这个api开发模型感兴趣。


测试和文档都是稀疏的。如果有足够的兴趣,
测试覆盖率和文档将成为优先事项。

让我知道您的想法!

[mike@theitemshoppe.com](mailto:mike@theitemshoppe.com)


你知道派皮上有美味的蛋糕吗?
---------------------------

[http://pypi.python.org/pypi/delicious cake](http://pypi.python.org/pypi/delicious cake)/


或运行:



——

**resources.py**:

`` python
类cake listresource(listresource):
"一个简单的列表视图"
def get(self,request,*args,**kwargs):
返回cake.objects.all()

def head(self,request,*args,**kwargs):
返回self.get(请求,*args,**kwargs)

def post(self,请求,*args,**kwargs):
cake_form=cakeform(request.data)

响应。

返回对象,已创建(布尔值)
return cake_form.save(),true

def delete(self,request,*args,**kwargs):
cake.objects.all().delete()


@models.permalink
def get_resource_uri(self):
return('cake-list',)

类元(对象):
有关更多"资源"选项,请参阅delicious戥cake/options.py。




个别地。
detail_entity_cls=cakedetailentity

cakedetailresource(detailresource):
"一个简单的细节视图"
def get(self,request,*args,**kwargs):
返回get_object_或_404(cake,pk=kwargs['pk'])

def put(self,request,*args,**kwargs:
pk=kwargs['pk']

try:
created=false
instance=cake.objects.get(pk=pk)
除了cake.doesnotexist:
created=true
instance=cake(id=pk)

cake-form=cakeform(请求数据,实例=实例)

使用http 200 ok更新了实例
return cake_form.save(),创建了


def delete(self,request,*args,**kwargs):
get_object_或_404(cake,pk=kwargs['pk']).delete()

def head(self,request,*args,**kwargs):
return self.get(self,request,*args,**kwargs)

class meta(object):
detail_entity_cls=cakedetailentity



class cakelistresourceextra(listresource):
向所有响应添加响应头。
def process_http_response(self,http_response,实体:
http悻response['x-the-cake-is-a-lie']=false

向所有get响应添加响应头。
def process悻http悻response悻get(self,http悻response,entities):
http悻response['x-cake-count']=len(entities)

def get(self,request,*args,**kwargs):
通过指定"entity"来告诉资源使用"cakedetailentity",而不是使用默认值("cakelistenty"。
返回resourcesponse(
cake.objects.all(),entity=cakedetailentity)

def post(self,请求,*args,**kwargs):
cake-form=cakeform(请求.数据)


如果不是cake-form.is-cake-valid():
raise validationerror(cake-form.errors)


#使用自定义的"httpresponse"类或将特定参数传递给"httpresponse"类的构造函数。

例如,在此方法中,我们希望返回一个http 201(已创建)响应,其中新创建的蛋糕的uri位于"location"头中。
"httpcreated"响应的参数将是可调用的。当调用时,它将
传递一个参数,即从cake对象创建的实体。


x-the-cake-is-a-lie头,没有实体体。


return resourcesponse(
cake,include\entity=false,
response\u cls=http.httpcreated,
响应kwargs={
"位置":lambda实体:entity.get_resource_uri()}

@models.permalink
def get_resource_uri(self):
return('cake-list-extra',)

类元(对象):
实体cls=cakelistenity
````
**url.py**:

``python
``url patterns=patterns('',
url(r'^cake/(?p<;pk>;\d+/$',cakedetailresource.as庘view(),name='cake-detail'),
url(r'^cake/$',cakelistsresource.as庘view(),name='cake-list'),
url(r'^cake/extra/$',cakelistsresourceextra.as庘view(),name='cake-list-extra'),)
```
**实体.py**:

``` python
类cakeentity(实体y):
@models.permalink
def get_resource_uri(self):
return('cake-detail',(self.obj.pk,))


class cakelistenity(cakeentity):
cake_type_choices_lookup=dict(cake.cake_type_choices)

resource_id=fields.integerfield(attr='pk')
cake_type=fields.charfield(attr='cake_type')

def process_cake_type(self,cake_type):
returnself.cake_type_choices_lookup.get(蛋糕类型,'未知')



类cakedetailentity(cakelistenity):
消息=fields.charfield()
`````
**模型.py**:

``python
类蛋糕(模型.model):
蛋糕类型生日=1
蛋糕类型毕业=2
蛋糕类型幸灾乐祸=3

蛋糕类型的选择=(
(蛋糕类型的生日,你的生日蛋糕,),
(蛋糕类型的毕业,你的毕业蛋糕,),
(蛋糕类型的幸灾乐祸,你的可耻骄傲蛋糕,),)

消息=models.charfield(最大长度=128)
蛋糕类型=models.positiesmalintegerfield(db_index=true)
```

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

推荐PyPI第三方库


热门话题
Java程序运行时错误   JavaAndroidStudio:与往常一样,四舍五入到next.5或.0   apache使用Java以表单数据形式上载文件   带矢量的java Freeflight相机如何正确旋转?   java如何以编程方式检索有关当前项目的语言、操作系统、体系结构等信息   java Twitter4J tweet实体?   java PdfBox编码异常   java在拖动未装饰的舞台时,如何强制光标停留在窗口上   JavaSpring注释扫描优化   java无法通过IntelliJ Idea在tomcat上运行服务   java在生命周期中如何拦截请求?   java中的数组返回错误