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 JavaFX TableView更新单元格,不更新对象值   在扫描器中使用分隔符的java   java OkHttp 4.9.2,连接无法重用,导致端口耗尽   eclipse中的c JNI:运行Java代码   java是否在出厂的所有硬件设备中都有/mnt/sdcard/Android/data文件夹(或等效文件夹)?   Java,在eclipse中访问资源文件夹中的图像   java为什么Bluemix dashDB操作抛出SqlSyntaxErrorException,SQLCODE=1667?   JavaHtmlUnitWebClient。getPage不处理javascript   Google API认证的java问题   java如何将JSON数组反序列化为Apache beam PCollection<javaObject>   ServerSocket停止接收命令,java/安卓   来自Java类的安卓 Toast消息   java如何自动重新加载应用程序引擎开发服务器?   java是否可以尝试/捕获一些东西来检查是否抛出了异常?   java如何做到这一点当我按下load game时,它不仅会加载信息,还会将您带到游戏中?   Java选项Xmx代表什么?   Java映射,它在插入时打印值   设置“ulimit c unlimited”后,java无法生成系统核心转储