django - 将 AngularJS 与 Django 一起使用的最佳实践是什么

标签 django rest angularjs

<分区>

我即将开始一个项目,客户端使用 AngularJS,服务器端使用 Django

使它们像最好的 friend 一样工作的最佳实践是什么(静态文件、身份验证、部署等)

最佳答案

有一些方法可以从 Django 模板为您的客户端模板提供支持,以进行有趣的优化;然而,鉴于 Django 和 AngularJS 的模板语言之间的相似性,在这里几乎不值得付出努力。我会将 AngularJS 的静态服务与 Django REST Framework 配对对于大多数此类项目。

我的 urls.py 操作顺序几乎总是首先是 Django REST Framework URL(尽可能严格地编写),然后是将其他所有内容指向我的基本 AngularJS 应用程序模板的通用模式我的 STATIC_ROOT 本地测试/开发场景的目录:

if settings.DEBUG:
    urlpatterns += patterns('django.contrib.staticfiles.views',
        url(r'', 'serve', {
            'document_root': settings.STATIC_ROOT, 
            'path': '/base.html'}
        ),
    )

通过将所有不匹配的请求指向同一个应用程序/模板,您可以开始使用 URL 和路由的 history-hack 方法(如果您更喜欢 hashtags)。如果您只打算坚持主题标签,您的最终 URL 匹配可能会更严格(例如匹配 /(URL 根)与 r'^$')。

在生产中,我将使用反向代理或像 nginx 这样的慢速客户端 HTTP 服务器来提供 AngularJS(静态)内容,将 REST 服务请求代理到 Django WSGI 应用。

为了与 Django REST Framework 通信,我更喜欢使用类似类的 JS 对象来编码 AngularJS 应用程序和 Django REST Framework 之间的数据。为此,我使用 angular-django-rest-resource生成表示我在 REST Framework View 中公开的 Django 模型类的类。

为了最大限度地灵活地查询 angular-django-rest-resource 可以对资源进行的查询,我将为 REST Framework 安装 django-filter 后端,如所述 here .这允许 JS 资源请求受参数约束的 Django 对象(例如 /polls/?author=345&finished=1)。

如果你在一个单独的服务器域上部署 Django 和 REST 操作,从那里提供 AngularJS 主模板(例如,如果你在不同的 Internet 域上使用第三方 CDN 来获取 HTML) ,那么允许对这些资源的跨域请求很重要。为此,我推荐 django-cors-headers中间件。

希望对您有所帮助。这不是最佳实践集,但它对我有用。

关于django - 将 AngularJS 与 Django 一起使用的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18148909/

相关文章:

django - 托管私有(private) Sphinx 文档

mysql - 创建选择字段时出错

javascript - Angular + ui-grid + 计算列总数

javascript - 工厂、服务和 vendor 之间有什么区别?

javascript - 在渲染 Angularjs 之前隐藏元素

python-3.x - Django多对一关系将数据添加到多方

python - 无法在 AWS Rest API 请求中使用 "Filter"

java - RESTful - 在 Queryparam 中获取 null

rest - 如何从我的 angularjs 页面中的 RESTful API 访问服务?

django - 如何在 Django 管理站点上授予用户权限