Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?

Posted

技术标签:

【中文标题】Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?【英文标题】:Django + AngularJS: REST-like endpoints without the Django REST framework using plain URLs and views? 【发布时间】:2016-12-15 12:53:51 【问题描述】:

我们刚刚开始创建新产品。我们想在后端使用 Django,在前端使用 Angular 来形成一个单页应用程序。 这意味着我们根本不会使用 Django 的模板系统(可能除了一个必要的 html 文件,但这个可能是静态的)。

在进行研究时,我们发现了 Django REST 框架,它为 Django 提供了 REST 功能,允许从 Angular 轻松通信。

由于我们或多或少都是 Web 开发的新手,因此我们请教了一个维护 Python 包的人。根据他对 REST 框架的经验,他建议我们放弃使用它的想法,因为它会混淆代码(序列化程序)、速度慢、引入其他问题等。

我们现在正在考虑使用普通的 Django 并将 URL 结构设计为 Angular 的类似 REST 的端点。我们将为每个 URL 设置一个视图方法,然后根据请求类型(GET、POST、PUT...)执行操作并仅返回 JSON。

这是个好主意吗?在使用 REST 框架方面我们会失去什么?我们会得到什么?对于这些方法中的任何一种,使用 Angular 进行服务器调用会完全不同吗?

【问题讨论】:

【参考方案1】:

我不喜欢 DRF,但我最近在几个项目中使用了它。大多数问题的答案都取决于应用程序,这意味着您的网络应用程序的大小和类型很重要。

对于我从使用 DRF 中获得的好处,它可以帮助您:

对象序列化(和验证):我认为通过 DRF 制作序列化程序而不是在 Django 中构建它们要容易得多(避免打字)。虽然模型和查询集通常很容易完成,但如果您需要更结构化的 JSON 响应,支持序列化的 DRF 层会有所帮助。 权限和身份验证:针对 REST API,有很好的捷径来提供安全性并限制对方法的访问,无论是在方法类型还是用户权限检查方面。 插件:如果您必须处理(您可能会这样做)CORS 和/或基于令牌的授权,那么您可以插入 DRF 以完成工作。我不确定将它们直接放在 Django 中是否那么简单。

这就是说缺点

如果您从使用 DRF 的高级接口(视图集、路由器等)开始,您最终会进行一些重构以解决您需要对代码进行更多控制的特定需求。 由于 Django 已经是一个相当大的生态系统,DRJ 增加了学习曲线的陡峭程度,起初可能会稍微减慢实施速度。 不知道通过 DRF 的请求的性能,但除非您的应用程序有特定要求,否则我不会太在意。 DRF 可能不会在编写良好的代码(...以及对数据库的查询)上添加太多。

这是我的两分钱。希望对您有所帮助。

【讨论】:

以上是关于Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?的主要内容,如果未能解决你的问题,请参考以下文章

Django 不使用 Angularjs

Angularjs路由与django的网址

Angularjs 中的 Django 管理员

AngularJS 与 Django - 模板标签冲突

AngularJS 与 Django - 冲突的模板标签

AngularJS 与 Django - 冲突的模板标签