2013-04-29 22 views
17

Tôi đang cố gắng kết hợp xung quanh việc kết hợp một khung công tác phía máy khách như AngularJS với Django. Một điều thực sự gây nhầm lẫn cho tôi là vấn đề tuyến đường và REST.Các tuyến Django, REST và Angular

Tôi đã cố gắng đọc rất nhiều về nó trực tuyến, nhưng tài liệu bị giới hạn, đặc biệt là về Django được kết hợp với Angular (đoạn nhỏ ở đây hoặc ở đó). Tôi hiểu rằng tôi cần thêm một khung công tác REST như TastyPie để tạo một giao diện REST mạnh mẽ trong ứng dụng của tôi để Angular có thể cắm và lấy các tài nguyên. Tuy nhiên, tôi nhầm lẫn về cách lập bản đồ đúng cách theo cách mà (1) ứng dụng phía máy chủ của tôi có thể hiển thị ứng dụng một trang (SPA) của tôi với các đường nối góc (2) đó là nghĩa vụ phải tải thông tin/render mẫu (góc) và lấy dữ liệu từ máy chủ (django) không xung đột. Giống như nếu tôi có ai đó đang truy cập trang web của tôi và thực hiện site.com/user/1234 - tuyến đường đó được liên kết với cả tuyến đường Tuyến và tuyến đường Django - ngoại trừ tuyến đường biểu diễn mẫu và đoạn đường khác rút ra JSON dựa trên những gì được lấy từ DB/máy chủ.

Ngoài ra, bằng cách sử dụng REST api, tôi có bỏ qua rất nhiều lợi thế mà tôi có về việc có ModelForms đang được đồng bộ hóa với Mô hình của tôi không? Có cách nào để duy trì điều này với AngularJS hay tôi phải nhìn về hướng thay thế AngularJS.

Trả lời

20

Câu hỏi này không thực sự cụ thể đối với Django - chỉ là vấn đề hiểu được mối quan hệ giữa back-end và front-end trong SPA.

Các tuyến đường không bị trùng lặp giữa đầu cuối và mặt trước. tuyến đường Django của bạn nên được thiết lập như thế:

/api/foo 
/api/bar 
... 

và một tuyến đường duy nhất mang lại một đơn trang đầy đủ của partials HTML, ví dụ

/ 

Phần còn lại của các tuyến đường sẽ được xác định trong Góc, ví dụ:

/articles/234 
/blog/date/slug 
... 

Bộ điều khiển góc xử lý các tuyến đường công khai này sẽ thực hiện $ http đối với URL API và mỗi kênh sẽ cung cấp một phần Góc. Vì vậy, không có sự trùng lặp, không trùng lặp.

Phần thứ hai của câu hỏi, bạn vẫn có thể sử dụng mối quan hệ mô hình ORM Django khi xây dựng dữ liệu API của bạn, nhưng có, bạn sẽ mất tất cả sự tốt đẹp của Django khi xây dựng giao diện người dùng.

Nếu bạn tạo đúng API, tất cả dữ liệu bạn cần trong mỗi chế độ xem sẽ có mặt đầy đủ trong nguồn cấp dữ liệu JSON mà Angular tiêu thụ trong chế độ xem đó. Vì vậy, bạn đang sử dụng ORM để xây dựng dữ liệu back-end, nhưng bạn không thể quyết định đi qua một mối quan hệ mô hình trong một khuôn mẫu mà không cần chuẩn bị dữ liệu back-end để cung cấp dữ liệu cho nó.

Vâng, đó là một cách suy nghĩ rất khác nhau về mọi thứ, và có nó phức tạp hơn một chút so với làm Django thẳng (hoặc Rails). Đó là chi phí xây dựng một ứng dụng web thay vì một trang web.

+1

không phải để xây dựng các ứng dụng web? Phía máy khách và phía máy chủ? Ý của bạn là gì "Đó là chi phí xây dựng một ứng dụng web thay vì một trang web". – BluePython

+0

@shacker là lỗi đánh máy, và bạn có nghĩa là SOA, hoặc SPA? Nếu SPA, sau đó cho những gì hiện nó đứng? :) Dù sao GREAT ANSWER +1 – andi

+0

andi - SPA: http://en.wikipedia.org/wiki/Single-page_application – shacker

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