将REST添加到Django

S.L*_*ott 50 python apache django rest

我有一个很好用的Django应用程序.我正在添加REST服务.我正在寻找关于我的REST策略的一些额外输入.

这里有一些我正在绞尽脑汁的例子.

  • 现在,我正在使用带有一堆补丁的Django-REST API.
  • 我想回到简单地在Django中编写返回JSON结果的视图函数.
  • 我还可以看到在Apache中过滤REST请求并将它们路由到单独的非Django服务器实例.

请为每个答案指定一种方法,以便我们可以向上或向下投票.

Ali*_*har 59

我想回到简单地在Django中编写返回JSON结果的视图函数.

  • 明确的
  • 可移植到其他框架
  • 不需要修补Django

  • 这篇文章有一些非常好的部分,但是作者断言应该将API密钥添加到URL中是错误的,并且是非RESTful的.这就是WWW-Authenticate和Authorization标题的用途.(请参阅Mike Amundsen和Ron Wail的评论,以获得更全面的解释) (7认同)
  • 这可以让你有一定的距离,但如果你想进行身份验证,那么请不要重新发明轮子 - 这就是我们在网络上结束大量不安全的网络应用程序的方式.这就是为什么我们都喜欢Django auth模块(我们这样做?不是我们......).一篇带有更多解释的好文章以["我恳求你跟随别人的榜样而不是推出自己的认证方案."](http://broadcast.oreilly.com/2009/12/principles-for-standardized-休息-authentication.html). (3认同)

yfe*_*lum 30

请注意,REST并不仅仅意味着JSON结果.REST本质上意味着在本机但功能齐全的HTTP上公开面向资源的API.我不是REST的专家,但这里有一些Rails正在做的事情.

  • URL应该是资源的简单名称
  • 使用正确的HTTP方法
    • HEAD,GET,POST,PUT和DELETE
    • (可选)使用覆盖(表单参数'_method'将覆盖HTTP请求方法)
  • 通过Accept request-header支持内容类型协商
    • (可选)使用覆盖(URL中的文件扩展名将覆盖Accept请求标头中的MIME类型)
    • 可用的内容类型应包括XML,XHTML,HTML,JSON,YAML以及其他许多其他内容

例如,要获得本机HTTP支持,服务器应该响应

GET /account/profile HTTP/1.1
Host: example.com
Accept: application/json
Run Code Online (Sandbox Code Playgroud)

因为它会回应

GET /account/profile.json HTTP/1.1
Host: example.com
Run Code Online (Sandbox Code Playgroud)

它应该回应

PUT /account/profile HTTP/1.1
Host: example.com

var=value
Run Code Online (Sandbox Code Playgroud)

因为它会回应

POST /account/profile HTTP/1.1
Host: example.com

_method=PUT&var=value
Run Code Online (Sandbox Code Playgroud)


oli*_*and 25

对于其他寻找Django非常体面的可插拔API应用程序的人来说,请务必查看在BitBucket内部使用的jespern的django-piston.

它维护得很好,有很好的跟踪和一些很酷的分支,可以添加对分页和其他身份验证方法的支持(OAuth支持开箱即用).

更新以反映不再维护django-piston.

  • Django-piston不再被认为是"维护得很好".虽然代码在或多或少被放弃时是稳定的,但随着django(和社区)的继续,它已经并且将变得越来越过时.首先,有许多未解决的错误报告.活塞死了,django-tastypie和django-rest-framework.http://pydanny.com/choosing-an-api-framework-for-django.html (5认同)
  • 赞成编辑 (2认同)

Ric*_*kyA 7

Tastypie也是Django新兴的REST框架.它与活塞具有相同的心态,并消除了大量的样板编码.


esp*_*akk 5

我在这里回答同一个问题:在Django中实现REST Web服务的框架

简短的版本是早期的https://github.com/jgorset/django-respite/一个REST框架,但我们每天都在客户端项目中使用它.