不合理的繁荣
  • 金沙手机APP
  • 一个django反模式,滚动自己的休息

    2008年6月13日。
    Django(72), 休息(1), 反模式(2)

    上周我收到了一封电子邮件查理奥基特而且,它的一个主题是在Django中缺乏对RESTful API的简单支持。我承诺了一个关于这个主题的快速博客条目,但它并没有真正走到一起。问题是图书馆之一。并不是没有图书馆,有一场少数,但他们没有一个人尚未达到甜蜜的地方。

    我认为社区对这个缺乏没有太烦恼,因为它通常是为了写下你只需要几个观点而手工需要的舒适观点。这就是为什么许多Ajax繁重的应用程序最终将结束代码界面,该代码界限为该应用程序实现RESTful API的必要子部分:

    @需要登录def更新(要求):d=要求。邮政。复制()ID=d。流行音乐('PK')[0.]模型=d。流行音乐('模型')[0.]目的=get_class.(模型)。对象。得到(PK.=ID)obj_dict.=目的。__dict__为了钥匙在d。钥匙():如果obj_dict.。has_key.(钥匙):瓦=d[钥匙]如果钥匙在Boolean_fields.:如果瓦==.你“真实”:瓦=真的el瓦==.你“假”:瓦=错误的el钥匙在slug_fields.:瓦=诽谤(瓦)el钥匙在DateTime_Fields.:T.=时间。mktime.(时间。strptime.(瓦那“%y-%m-%D.%h:%m:%s“)))瓦=约会时间。约会时间。fromTimestamp.(T.)obj_dict.[钥匙]=瓦el钥匙在many_to_many_fields.:val=d。别家(钥匙)经理=getattr.(目的那钥匙)经理。清除()如果不是(Len.(val)==.1和val[0.]==.-1):经理。添加(*val)目的。保存()返回httpresponse.(“成功”)

    在这种特殊的半心半心半心半心半心半心半心半节目中,我正在使用预定义的字段元组 - 而不是实地查找 - 弄清楚如何处理某些字段。我还使用一个非常有限的权限模型 - 您登录了吗? - 由于应用程序没有记录非管理员的组件。

    这是我为不同的项目写入的有点智能版本:

    defgeneric_update.(要求那模型):'API的抽象更新操作。模型=locate_class_by_string.(模型)地位那obj_or_msg.那参数=Retrieve_by_id.(要求那模型)如果地位是真的:尝试:为了钥匙在参数。钥匙():瓦=参数[钥匙]F=get_field.(模型那钥匙)如果F。__班级__==.领域。有关的。外国人:瓦=F。rel.。至。对象。得到(PK.=瓦)setattr.(obj_or_msg.那钥匙那瓦)obj_or_msg.。保存()数据=简单json.。倾倒({'成功的':真的})返回httpresponse.(数据那mimetype.='application / json')除了:味精=“更新的不当参数%S.。“%模型返回erceper_api_request.(味精)别的:返回erceper_api_request.(obj_or_msg.)

    我们还为我们正在做的所有其他宁静的事情进行实现,例如创建新实例:

    defgeneric_create.(要求那模型):'API的抽象创建操作。defconvert_keywords.(d):'忏悔方式将Unicode Dict键转换为字符串。new_dict.={}为了钥匙在d。钥匙():new_dict.[smart_str.(钥匙)=d[钥匙]返回new_dict.模型=locate_class_by_string.(模型)参数=process_json_params.(要求)如果参数是不是没有任何:尝试:#关键字传递为参数必须是字符串,#所以这是一个促进它的黑客,但是#必须是一个清洁解决方案。参数=convert_keywords.(参数)为了钥匙在参数。钥匙():瓦=参数[钥匙]F=get_field.(模型那钥匙)如果F。__班级__==.领域。有关的。外国人:参数[钥匙]=F。rel.。至。对象。得到(PK.=瓦)新模式=模型(**参数)新模式。保存()数据=简单json.。倾倒({'成功的':真的那'PK':新模式。PK.})返回httpresponse.(数据那mimetype.='application / json')除了:味精=“创建实例的不正确的参数。”返回erceper_api_request.(味精)别的:味精=“创建实例的不正确的参数。”返回erceper_api_request.(味精)

    这些实现中的每一个都具有散落的辉煌和不太精彩的支持功能。我个人的一些例子:

    与魔法拼图的函数一样,将小写字母划分为正确的模型脉冲。

    deflocate_class_by_string.(细绳那模块):'''根据字符串从模块返回类对象。预期输入:'案例','事件,'Email_Address''''def帽(str.):返回str.。资本化()def结合(一种那B.):返回“%S._%S.“%(一种那B.)capitalied_string.=减少(结合那地图(帽那细绳。分裂('_'))))返回getattr.(模块那capitalied_string.)

    或者要检索请求的函数是指的...

    defRetrieve_by_id.(要求那模型):'尝试按ID检索模型实例。参数=process_json_params.(要求)如果参数是不是没有任何和参数。has_key.('ID'):ID=参数['ID']尝试:目的=模型。对象。得到(ID=ID)返回真的那目的那参数除了ObjectDoesNotexist.:返回没有任何那“ID指的是不存在的实例。”那参数别的:返回没有任何那“没有指定有效ID。”那参数

    我的意思是,该死的,我将在我坐下来写一个完整的一个休息API的平庸作品中,我打算多少次?目前我正在寻找一些现有的Django休息项目。我很确定有足够的人对解决这个问题,我们可以找到一个非常引人注目的解决方案。正如我键入我的头脑风暴,我认为为Django的最佳休息将涉及,并将在第二天或两个人中试图发布我的思想的结果。

    在他们开始对他们的项目开始之前,我想听听其他人从RESTful API中需要什么。

    嗨伙计。我是将要阿卡@lethain.。
    如果你想向我联系,那么我提供帮助的方式。如果您想从我这里收到电子邮件,请订阅我的每周时事通讯金沙手机APP。

    我写一个优雅的拼图。

    也,员工工程师。

    受欢迎的

    • 写五,然后合成:良好的工程战略很无聊。
    • 管理Codebase中的技术质量。
    • 致力于重要的事情。
    • 您的第一个90天作为CTO或VP工程。
    • Digg团队如何被剥夺。

    最近的

    • Mailbag:我们应该打电话给他们建筑师吗?
    • RSS饲料更换!接下来几天迁移博客。
    • sands金沙直营赌场
    • 工程造成措施。
    • 数字园艺在旺盛的草图。

    有关的

    • 极简主义
    • 在Lifeflow的公众脸上工作
    • 释放Lifeflow版本0.90
    • 在Django URL中使用可选参数
    • 生命流编辑的技术方面
    ©将金沙手机网larson 2021 标签 金沙手机APP rss. 关于