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

让他们像最好的朋友一样工作的最佳实践是什么(静电文件、身份验证、部署等)

推荐答案

有一些方法可以通过Django模板支持客户端模板进行有趣的优化;但是,考虑到Django和AngularJS的模板语言之间的相似之处,这里的努力几乎是不值得的.我会把天使JS的静电和大多数这类项目的Django REST Framework%搭配起来.

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

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

通过将所有不匹配的请求指向同一个应用程序/模板,你可以开始使用URL和路由的历史黑客方法,如果你更喜欢这种方法,而不是标签.如果你只打算坚持使用标签,那么最终的URL匹配可能会更严格(例如,将/(URL根)与r'^$'匹配).

在生产中,我将使用反向代理或慢客户端HTTP服务器(如nginx)来服务AngularJS(静电)内容,将睡觉服务请求代理到Django WSGI应用程序.

为了与Django睡觉框架通信,我更喜欢使用类似类的JS对象来将数据编组到AngularJS应用程序和Django睡觉框架.为此,我使用angular-django-rest-resource来生成表示我在睡觉框架视图中公开的Django模型类的类.

为了让django rest资源能够为资源提供最大的灵活性,我将为rest框架安装django-filter后端,如here所述.这允许JS资源请求受参数约束的Django对象(例如/polls/?author=345&finished=1).

如果您将Django和睡觉操作部署在提供AngularJS Main模板的不同服务器域上(例如,如果您对HTML使用不同Internet域上的第三方CDN),那么允许对这些资源的跨域请求是很重要的.为此,我推荐django-cors-headers中间件.

我希望这对你有帮助.这不是the个最佳实践集,但它对我很管用.

Django相关问答推荐

Django:无法分配必须是实例(&Q;X),不想获取对象(&Q;)

未显示SWAGER上的一些示例架构

在生成的表单元素处出现多值DictKeyError

try 在 django 中发送验证邮箱,出现错误

Django基于查询集动态筛选字段名称

反向 url django 管理员

在 Django 模板中呈现标签名称而不是整数字段

Django 嵌套事务 - with transaction.atomic()

获取结果集中返回的元素数的 django 模板标签是什么?

django 在 ubuntu 中安装在哪里

如何缓存 Django Rest Framework API 调用?

django excel xlwt

可以在 github 页面上托管 django 站点吗?

CherryPy 与 Django

如何在 Django Rest Framework SimpleRouter 上使斜杠可选

Django - 每 x 秒运行一个函数

Python Django:您正在使用 staticfiles 应用程序而没有设置 STATIC_ROOT 设置

如何使用查询参数构造 Django 反向/url?

Django:以 10 为底的 int() 的无效文字

在 Django 开发服务器中关闭静态文件的缓存