与Django一起使用AngularJS的最佳实践是什么?

我即将开始与客户端的AngularJS和服务器端的Django项目。

什么是使他们像最好的朋友一样工作的最佳实践(静态文件,authentication,部署等)

有一些方法可以从Django模板中为你的客户端模板提供有趣的优化。 但是,鉴于Django和AngularJS的模板语言之间的相似之处,在这里几乎是不值得的。 我将把静态的AngularJS服务和Django REST框架结合起来用于这类大多数项目。

我的urls.py操作顺序几乎总是首先是Django REST框架URL(尽可能严格地写),后面跟着一个通用模式,指向我的STATIC_ROOT目录中的基础AngularJS应用程序模板的所有其他地方,用于本地testing/ dev场景:

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

通过将所有不匹配的请求指向相同的应用程序/模板,您可以开始使用URL和路由的历史破解方法,如果您希望使用hashtags。 如果您只打算使用主题标签,则最终的URL匹配可能会更严格(例如匹配/ (URL根目录)和r'^$' )。

在生产中,我将使用反向代理或缓慢客户端HTTP服务器(如nginx)来服务AngularJS(静态)内容,将对REST服务的请求代理到Django WSGI应用程序。

为了与Django REST框架进行通信,我更喜欢使用类的JS对象来封送来自AngularJS应用程序和Django REST框架的数据。 为此,我使用angular-django-rest-resource来生成表示我在REST Framework视图中公开的Django模型类的类。

为了在查询中获得最大的灵活性,angular-django-rest-resource可以为资源创build,我将为这个REST框架安装django-filter后端。 这允许JS资源请求受参数限制的Django对象(例如/polls/?author=345&finished=1 )。

如果您将Django和REST操作部署在AngularJS主模板服务的独立服务器域上(例如,如果您在HTML的其他Internet域中使用第三方CDN),则它是重要的是允许跨域请求这些资源。 为此,我推荐django-cors-headers中间件。

我希望这是有帮助的。 这不是最好的做法,但它是为我工作的。

为了防止与Django混合使用Angularjs,请参考: https ://docs.angularjs.org/api/ng/provider/ $ interpolateProvider

基本上可以使Django使用{{xyz}}variables和angular来同时使用{[xyz}]}variables:

 app.config(function($interpolateProvider) { $interpolateProvider.startSymbol('{[{'); $interpolateProvider.endSymbol('}]}'); });