首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确使用Django (Web和移动部署)

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

Stack Overflow用户
提问于 2012-10-20 18:49:44
回答 1查看 585关注 0票数 0

这是一个非常笼统和公开的问题。因此,昨天我们决定,我们想要创建一个基于我们的网站,目前正在与Django构建的iOS应用。现在,Django和RoR一样,应该对UI是透明的;它不应该关心用户正在使用什么UI。(适当的MVC)

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

代码语言:javascript
运行
复制
 @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。如果我们只需要使用Django创建HTTPResponses,我就不认为这样做有什么意义。如果我们使用像TastyPie这样的东西,我们就不能用POST语句创建设备(就像我们现在所做的那样),就好像您看我们当前的add函数一样--在这个函数中做了很多事情,而TastyPie不能称之为它。
  2. 我的主要问题是,是应该运行一个REST,还是像用于iOS和Web平台的普通Django服务器一样运行,还是只是具有相同的功能,根据它有不同的入口点和呈现?
  3. 何时创建REST?在创建和获取数据时,我们的许多功能现在都不能正常工作,只需要标准的POST和呼叫。这很糟糕吗?

我有点困惑..。很抱歉有这么长的问题,再次感谢!

EN

回答 1

Stack Overflow用户

发布于 2012-10-20 19:00:55

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

REST的真正目的是从HTTP已经提供的所有工具中获利,而不是发明另一层封装(比如SOAP)。

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

这样,数据就更简单了,缓存更容易了,集成就像饼一样容易了。

此外,有了一个好的REST,您甚至可以构建一个网站,它使用一些JavaScript框架(例如backbonejs)从API中消耗的数据构建UI。

更新

因此,考虑到Django中REST的当前状态,并具有一些生产和使用API的经验,我建议您构建以下两种方法:

  1. 一个RESTful API与您的网站,使用相同的控制器,您使用的网站,如果可能的话。同样的网站实际上是RESTful,唯一的区别是它不是一个API。我在一些项目中尝试使用几个库来构建API,但最终总是为它生成自己的代码。有时候这样容易些。所有客户端应用程序(iOS,android,不管怎样)都将使用您的API,这样您就可以完全解耦它。 如果您不喜欢自己构建所有的API,那么也许活塞可以作为一种有效的替代味道的方法。
  2. 只使用 API,并使用客户端技术重新构建站点.为什么让您(少数)服务器忙于生成HTML,而您(许多)客户/用户的浏览器可以完成同样的工作,而您却不支付电费呢?

在任何情况下,RESTful API都将帮助您获得应用程序的数据结构。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12991593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档