Django 我的基于web的应用程序是否应该是api的消费者?

Django 我的基于web的应用程序是否应该是api的消费者?,django,api,Django,Api,我将很快开发一款移动应用程序(iPhone)和一款基于web的应用程序(Django)。对于移动应用程序,我将创建一个RESTAPI(很可能使用Django)来从手机向服务器来回发送数据 当我开始创建基于web的版本时,仅仅将其创建为api的任何其他客户端是否有意义。换句话说,移动应用程序和web应用程序都将通过HTTP从外部API获取数据。或者,基于web的应用程序是否应该直接访问api使用的数据库并以这种方式获取其数据?我将创建web应用程序,为移动客户端提供api服务。也就是说,允许基于w

我将很快开发一款移动应用程序(iPhone)和一款基于web的应用程序(Django)。对于移动应用程序,我将创建一个RESTAPI(很可能使用Django)来从手机向服务器来回发送数据


当我开始创建基于web的版本时,仅仅将其创建为api的任何其他客户端是否有意义。换句话说,移动应用程序和web应用程序都将通过HTTP从外部API获取数据。或者,基于web的应用程序是否应该直接访问api使用的数据库并以这种方式获取其数据?

我将创建web应用程序,为移动客户端提供api服务。也就是说,允许基于web的应用程序直接访问数据库。这将简化XML/JSON RESTful资源访问。

将其分为三个“部分”。第一种方法使用pythonapi来操作数据库。第二个接口将RESTAPI与Python API连接起来。第三个讨论web并使用Python API。

我会说不,不要将API用于HTML版本。如果将Django设计得很好,那么最终得到的代码可能比使用HTML版本的API少。您还可以保留让web设计师在老板希望更改某些内容的拼写时使用Django模板的能力

我建议您尝试为iPhone应用程序定义一个基本应用程序,然后在第二个应用程序中为HTML版本扩展它
App1
将包含您的所有模型(包括业务逻辑),以及一个
views.py
用于处理与iPhone之间的数据。然后创建
App2
,它使用
App1.models
,但创建自己的
views.py
。如果幸运的话,您将发现自己可以只更改用于呈现输出的模板,因此可以通过将模板作为参数传递来重用视图

例如:

App1.视图:

def list(request, template="list.json"):
    list = Model.objects.filter(deleted=False).filter(user=request.user)
    list.reverse()
    ## Lots of other logic to work on the list.
    return render_to_response(template, {list: list,})
def list(request, template="list.html"):
    return App1.views.list(request, template=template)
App2.视图:

def list(request, template="list.json"):
    list = Model.objects.filter(deleted=False).filter(user=request.user)
    list.reverse()
    ## Lots of other logic to work on the list.
    return render_to_response(template, {list: list,})
def list(request, template="list.html"):
    return App1.views.list(request, template=template)

我认为这个问题的答案随着时间的推移已经改变了。一年前,当被问到这样做可能仍然太麻烦,但现在我肯定会说是的-使用API作为基础是明智的做法。随着网站使用越来越多的HTML5和移动应用程序变得越来越智能,让所有“UI”从同一API层读/写确实是有意义的。这将在将来为您提供更大的灵活性