如何正确使用Django(Web和移动部署)

时间:2012-10-20 18:49:45

标签: ios django web-services rest tastypie

这是一个非常笼统和开放主题的问题。所以昨天我们决定在我们的网站上创建一个iOS应用程序,目前正在使用Django构建。现在,Djang和RoR一样,假设对UI是透明的;它不应该关心用户使用的UI。 (适当的MVC)。

如果我查看一些代码,例如,我们将如何将设备添加到系统中:

 @login_required
 def add(request):
     r_user = request.user.userprofile
     form = EquipmentFormAdd(request.POST or None, c_id=r_user.company_id, error_class=DivErrorList)
     if form.is_valid():
        equipment = form.save(commit=False)
        equipment.company_id = r_user.company_id
        equipment.added_by_id = request.user.id
        default_file_path = EquipmentPicture.get_default_file_path()
        url_bucket = r_user.company.s3_bucket.name + default_file_path        
        cell = form.cleaned_data['cell']
        equipment.cell_order = cell.equipment_set.count() + 1
        equipment_picture = EquipmentPicture.objects.create(
            file=EquipmentPicture.get_default_file_path(),
            slug=EquipmentPicture.get_default_slug(), 
            bucket_name=r_user.company.s3_bucket.name,
            bucket=r_user.company.s3_bucket, added_by=request.user,
            company=r_user.company, url_with_bucket=url_bucket)                
        equipment.picture = equipment_picture
        equipment.save()
        return redirect('equipment_index')
   return render(request, 'equipment/add.html', {'equipment_form': form, 'company_id': r_user.company_id})

如果我看一下这个,我看到我们正在直接渲染模板并传递数据。这在iOS中不起作用。

几个问题:

  1. 我看到很多人都在创建REST API。如果我们可以用Django创建HTTPResponses,我真的没有意识到这一点。如果我们使用像TastyPie这样的东西,我们将无法使用POST语句创建一个设备(就像我们现在所做的那样),就像你查看我们当前的添加功能一样东西是在那个函数内完成的,而TastyPie也无法调用它。

  2. 我的主要问题是我们是否应该运行REST API以及适用于Web和iOS平台的普通Django服务器,或者只是具有相同的功能,具有不同的入口点和渲染图它吗

  3. 您何时创建REST API?创建和获取数据时,我们的许多功能现在只能使用标准的POST和GET调用。那不好吗?

  4. 我有点困惑......对不起这个冗长的问题并再次感谢!

1 个答案:

答案 0 :(得分:1)

REST API与GET和POST不同。它只是将它们用于数据而不是演示。您输出JSON或XML而不是标记代码。然后,API使用者构建数据所需的用户界面。

REST API的真正意义在于利用HTTP已经提供的所有工具,而不是发明另一层封装(如SOAP)

例如,要指示某些操作的结果(成功与否),请使用状态代码。要指示要执行的操作,通常使用动词(get,post,put,delete,head,options)。其他请求或响应元数据将进入适当的http标头。

这种方式数据更简单,缓存更容易,并且集成很容易。

此外,通过良好的REST API,您甚至可以构建一个使用一些JavaScript框架(例如backbonejs)的网站,以根据API消耗的数据构建UI。

<强>更新

因此,鉴于Django中REST事物的当前状态,并且有一些生成和使用API​​的经验,我会告诉你构建它们:

  1. 与您的网站一起使用RESTful API,如果可能,使用您用于网站的相同控制器。实际上,同一个Web实际上是RESTful,唯一的区别是它不是API。我曾尝试在一些项目中使用几个库来构建API,但总是最终为它生成我自己的代码。有时这样更容易。所有客户端应用程序(iOS,Android,等等)都将使用您的API,因此您可以完全解耦它。

    如果您不自觉地构建所有API,那么piston可能是tastypie的有效替代品。

  2. RESTful API,并使用客户端技术重建您的网站。为什么让(少数)服务器忙于生成HTML,当你的(多个)客户/用户的浏览器可以做同样的工作并且你不支付电费时呢?

  3. 在任何情况下,RESTful API都可以帮助您更好地组织应用程序的数据结构。