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

poi*_*rez 61 django rest angularjs

我即将为客户端启动AngularJS项目,为服务器端启动Django项目.

让他们像最好的朋友一样工作的最佳做​​法是什么(静态文件,身份验证,部署等)

Jus*_*hur 56

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

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

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

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

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

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

对于在查询角Django的休息资源可以使资源最大的灵活性,我将有Django的过滤器描述安装了REST框架后端这里.这允许JS资源请求受参数约束的Django对象(例如/polls/?author=345&finished=1).

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

我希望这是有帮助的.这不是最佳实践集,但它是一个已经为我工作.

  • 好问题.我把它留了出来因为每个案例都不同.社区采用的"最佳实践"是创建一个AngularJS服务,它为您提供单例来查询用户的身份验证状态.[本文](http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app)详细说明了如何构建此类服务.在使用Django的内置auth的情况下,我建议首先启用[Django REST Framework的基于会话的身份验证](http://django-rest-framework.org/api-guide/authentication.html#sessionauthentication) . (3认同)

yea*_*ske 7

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

基本上是为了让Django能够使用{{xyz}}变量和angular来一起使用{[{xyz}]}变量:

app.config(function($interpolateProvider) {
    $interpolateProvider.startSymbol('{[{');
    $interpolateProvider.endSymbol('}]}');
});
Run Code Online (Sandbox Code Playgroud)