如何正确地将 Django 与 AJAX 应用程序分离

How to properly decouple Django from an AJAX application?

本文关键字:AJAX 应用程序 分离 Django 正确地      更新时间:2023-09-26

我正在使用TastyPie和Django来构建我的后端,以便将具有浏览器和移动(本机iOS)客户端的应用程序。

我已经浏览了 TastyPie 和 Django 文档,可以使用我设置的 TastyPie 资源或使用内置视图的 Django 成功进行身份验证。我看到很多关于在页面上包含 CSRF 令牌并使用您的 JavaScript 抓取它的示例,这有效,但我现在不明白实际确定用户是否在初始页面加载时登录(从 JavaScript)。

例:

如果我想从单独的快速 Web 服务器提供静态 HTML,并缓存我的应用程序 JavaScript,并且只通过 TastyPie 视图与 Django 交互,我如何确定用户是否已登录(并且知道使用 JavaScript 呈现登录表单或应用程序视图),以及注销后,是否有任何会话信息我需要从客户端浏览器中删除?

如果我通过 Django 的模板引擎提供 HTML,我可以适当地通过那里渲染登录表单,但如果我想真正将我的 JavaScript 应用程序与 Django 分离(并且表现得像移动客户端),这似乎并不理想。

编辑:我正在使用Backbone.js,但我认为这并不重要。

更新:

我想我再次阅读了Django的CSRF文档。

如果你的视图没有呈现包含csrf_token模板标签的模板,Django 可能不会设置 CSRF 令牌 cookie。这在表单动态添加到页面的情况下很常见。为了解决这个问题,Django 提供了一个视图装饰器,它强制设置 cookie:ensure_csrf_cookie()。

如果我不想渲染 Django 模板,这读起来就像我仍然可以使用 cookie 并将其拉入我的 Backbone 或 jQuery AJAX 方法中。我不确定TastyPie是否确保发送cookie或如何绑定它。

如果我使用 AJAX 注销,Cookie 会自动删除还是失效?这些 CSRF 令牌对于每个用户会话都是唯一的吗?明天我必须用它测试一些东西。是否可以在 TastyPie 视图上使用 Django 装饰器?

移动客户端并不关心Javascript是来自Django还是任何其他Web服务器。 所以继续把你所有的JavaScript和静态HTML放在另一个服务器上。

如果你想让你的移动应用程序查看用户是否登录,它应该对你的 Django 后端(请求经过身份验证的地方)进行 AJAX 调用。 返回的数据应指示会话是否处于活动状态(用户已登录)。

另一个 AJAX 调用可以执行 Django 注销功能。