2013-08-09 23 views

Trả lời

56

Có nhiều cách để cung cấp năng lượng của bạn mẫu client-side từ Django mẫu cho việc tối ưu thú vị là gì; tuy nhiên, với sự tương đồng giữa các ngôn ngữ mẫu của Django và AngularJS, nó gần như không bao giờ đáng để thử ở đây. Tôi sẽ ghép phục vụ tĩnh của AngularJS với Django REST Framework cho hầu hết các dự án thuộc loại này.

My urls.py Thứ tự hoạt động hầu như luôn là URL khung của Django REST (được viết càng chặt càng tốt), tiếp theo là mẫu chung trỏ mọi thứ khác vào mẫu ứng dụng AngularJS cơ sở của tôi trong thư mục STATIC_ROOT của tôi để thử nghiệm/phát triển cục bộ kịch bản:

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

bởi chỉ tất cả các yêu cầu chưa từng có cho các ứng dụng tương tự/mẫu, bạn có thể bắt đầu sử dụng phương pháp lịch sử hack URL và định tuyến nếu bạn muốn rằng để hashtags. Nếu bạn chỉ lập kế hoạch để gắn thẻ bắt đầu bằng #, URL khớp cuối cùng của bạn có thể chặt chẽ hơn (ví dụ: đối sánh / (URL gốc) với r'^$').

Trong sản xuất, tôi sẽ sử dụng máy chủ proxy ngược hoặc máy khách HTTP chậm như nginx để phục vụ nội dung AngularJS (tĩnh), ủy quyền yêu cầu dịch vụ REST cho ứng dụng Django WSGI.

Để liên lạc với khung công tác REST của Django, tôi thích có các đối tượng JS giống lớp để sắp xếp dữ liệu đến và đi từ ứng dụng AngularJS và khung REST Django. Đối với điều này, tôi sử dụng angular-django-rest-resource để tạo ra các lớp đại diện cho các lớp mô hình Django mà tôi đang trưng bày trong khung nhìn REST Framework.

Để có sự linh hoạt tối đa trong truy vấn góc-django-phần còn lại-tài nguyên có thể tạo tài nguyên, tôi sẽ có phụ trợ django-filter được cài đặt cho khung REST như được mô tả here. Điều này cho phép các tài nguyên JS yêu cầu các đối tượng Django bị ràng buộc bởi các tham số (ví dụ: /polls/?author=345&finished=1).

Nếu bạn đang triển khai các hoạt động Django và REST trên một miền máy chủ riêng biệt, từ đó mẫu chính AngularJS được phục vụ (ví dụ: nếu bạn đang sử dụng CDN của bên thứ ba trên miền Internet khác cho HTML), thì điều quan trọng là phải cho phép yêu cầu miền chéo đối với các tài nguyên đó. Đối với điều này, tôi khuyên bạn nên sử dụng phần mềm trung gian django-cors-headers.

Tôi hy vọng điều này hữu ích. Nó không phải là bộ thực hành tốt nhất, nhưng đó là một tập hợp đã làm việc cho tôi.

+1

Bạn quản lý đăng ký và xác thực bằng cách nào? – poiuytrez

+0

Tôi định sử dụng Django cho phần xác thực. – poiuytrez

+3

Câu hỏi hay. Tôi bỏ nó ra bởi vì mọi trường hợp đều khác nhau.Một "Thực hành tốt nhất" mà cộng đồng đã áp dụng là tạo ra một dịch vụ AngularJS, cung cấp cho bạn một singleton để truy vấn trạng thái xác thực của người dùng. [Bài viết này] (http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app) chi tiết cách người ta có thể xây dựng một dịch vụ như vậy. Trong trường hợp sử dụng auth built-in của Django, tôi khuyên bạn nên bắt đầu bằng cách bật [auth session của Django REST Framework] (http://django-rest-framework.org/api-guide/authentication.html#sessionauthentication) . –

6

Để ngăn chặn hỗn hợp lên của Angularjs với Django tham khảo: https://docs.angularjs.org/api/ng/provider/ $ interpolateProvider

Về cơ bản để cho phép Django sử dụng {{xyz}} biến và góc sử dụng {[{xyz}]} biến với nhau:

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

Cảm ơn bạn rất nhiều !!!, tôi đã gặp sự cố khi sử dụng django + góc cạnh khi sử dụng {{}}. Nó làm tôi phát điên! – Herman

Các vấn đề liên quan