2015-12-06 13 views
5

Để tạo một ứng dụng web với các khả năng RESTful, tôi đã đọc và xem rất nhiều bài viết và video và tôi vẫn chưa có được bức tranh hoàn chỉnh về cách hoạt động của nó. Và tôi nên chọn. Mỗi câu trả lời khác là không hữu ích "nó phụ thuộc". Tôi đã đun sôi nó xuống một sự lựa chọn đầu tiên giữa Django và Node. Nhưng không nơi nào tôi tìm thấy toàn bộ "bức tranh" về cách các phần hoạt động cùng nhau và các mô-đun nào là cần thiết. Vì vậy tôi đã cố gắng để đưa tất cả vào một minh họa thô. Lưu ý rằng tôi là một người mới hoàn thành về điều này.Django và Node - cách hoạt động?

Tôi phát triển ứng dụng ERP với các mô-đun kế toán. Về cơ bản nó chủ yếu là về CRUD bên cạnh việc xem sơ đồ, in ấn và lưu trữ tài liệu. Vì vậy, đây là "nó phụ thuộc"

Điều duy nhất tôi đã quyết định là sử dụng nginx, Postgresql và Debian 8 làm công cụ/os. Đây là những ngôi sao cố định.

Câu hỏi của tôi là không thực sự là Django chung vs Node.js và nó không chỉ là một ý kiến ​​tôi muốn:

  1. là hình dưới đây có đúng không? Có ý kiến ​​gì không?
  2. Có cần thêm thành phần nào nữa không? Để bắt đầu?

Node.js and Django structure

Trả lời

16

Bạn có một nhiều câu hỏi - và trên StackOverflow cần có một câu hỏi có thể được trả lời mà không tạo nhiều cuộc tranh luận hay có ý kiến ​​chứ không phải là sự thật.

Vì vậy, tôi nghĩ câu hỏi của bạn có thể bị đóng là "quá rộng"; tuy nhiên tôi nghĩ nó xứng đáng là một câu trả lời.

Tôi sẽ không nói "điều đó phụ thuộc", mặc dù đó thực sự là tất cả những gì nó tóm tắt - nhưng đây là nỗ lực của tôi để giải thích nó.

nút js là thời gian chạy. Nó là một môi trường cho phép bạn phát triển mã trên máy chủ bằng cách sử dụng javascript. Để làm bất cứ điều gì hữu ích với nodejs, ngoài "hello world"; bạn sẽ cần phải sử dụng một khuôn khổ, và có rất nhiều những người xung quanh và ngăn xếp khác nhau đã được phát triển bởi cộng đồng để buộc trong tất cả các thành phần với nhau. Một ví dụ về một ngăn xếp như vậy là MEAN, đó là MongoDB cho cơ sở dữ liệu, Express cho khung công tác, Angular để hỗ trợ front-end và Node để chạy tất cả.

django là một khung công tác - nó không phải là thời gian chạy. Điều này có nghĩa rằng nó là một bước gỡ bỏ từ thế giới nút. Thời gian chạy cho django là Python. django cũng không phải là "ngăn xếp" như MEAN, bạn có thể phát triển ngăn xếp của riêng bạn - nhưng kể từ django là khung "pin đi kèm", bạn chỉ thực sự cần thêm cơ sở dữ liệu vào đó - nó bao gồm mọi thứ khác bạn cần .

REST chỉ là một cách để thiết kế các dịch vụ web. Nó không phải là một ngôn ngữ, hoặc một nền tảng hoặc một thư viện. Một bộ quy tắc mô tả cách thiết kế các API để chúng tận dụng các động từ ngữ nghĩa của HTTP.

Bạn có thể sử dụng bất kỳ thư viện và ngôn ngữ lập trình nào để phát triển dịch vụ RESTful. Tất cả những gì bạn thực sự cần là hai thứ [a] một thư viện để giao tiếp qua HTTP [b] một cách để tuần tự hóa dữ liệu, tốt nhất là trong JSON (nhưng thậm chí đó không phải là một yêu cầu).

nginx chỉ là máy chủ web rất nhanh và proxy ngược. Lý do nó được đề cập thường xuyên - là bởi vì nó là rất tốn kém cho một khuôn khổ để phục vụ phương tiện truyền thông tĩnh.Tất cả các yêu cầu đối với một khung công tác (trong thế giới django, hoặc trong thế giới nodejs) phải trải qua một chuỗi các thành phần lớn giúp giải mã yêu cầu HTTP và tạo cấu trúc dữ liệu dễ sử dụng cho các nhà phát triển. Chuỗi thành phần này thường được gọi là phần mềm trung gian. Vì mỗi và mọi yêu cầu phải trải qua phần mềm trung gian này, nên tốt hơn cho các lý do hiệu suất yêu cầu không cần "sức mạnh" của ứng dụng để thực thi (như yêu cầu cho một hình ảnh, biểu định kiểu, tệp video) xử lý bởi cái gì khác. Đây là những gì nginx được sử dụng cho, vì nó là một máy chủ web rất nhanh.


Bây giờ, những điều đó được giải thích, bạn cần xem chồng nào hoạt động tốt nhất cho ứng dụng của bạn. Để làm điều đó, bạn cần phải biết một chút về triết lý/biện minh hoặc vấn đề mà mỗi ngăn xếp đang cố gắng giải quyết.

Đối với django - điều này thật dễ dàng. Django được tạo ra bởi một nhóm làm việc trên nhiều tờ báo để giúp họ quản lý nội dung được xuất bản trên các trang web khác nhau. Như vậy, nó được thiết kế để quản lý nội dung là mối quan tâm chính. Đó là lý do tại sao nó có một giao diện quản trị rất mạnh mẽ như là một thành phần tiêu chuẩn; và một ORM khá tích hợp và công cụ tạo khuôn mẫu riêng của nó. Django để nó cho bạn biết cách tốt nhất để thực sự chạy và triển khai nó; mặc dù họ cung cấp rất nhiều đề xuất và ví dụ - nhưng cuối cùng, tối đa bạn quyết định sử dụng cơ sở dữ liệu nào, máy chủ web nào sẽ sử dụng và cách triển khai ứng dụng.

Trong thế giới nodejs - trọng tâm chính là nonblocking I/Otốc độ của phản ứng. Nodejs vượt trội khi có thể phục vụ rất nhiều yêu cầu đồng thời về tài nguyên giới hạn. Vì vậy, nó cung cấp cho bạn một nền tảng rất mạnh mẽ để phát triển các ứng dụng cần phải nhanh chóng đáp ứng các yêu cầu ... và đó là nó. Khi bạn lập trình trong nút hoặc bất kỳ thư viện cấp thấp chuyên biệt nào khác, bạn cần đảm bảo mã của bạn đang tận dụng hết lợi thế của thư viện. Vì vậy, nếu bạn bắt đầu viết mã chặn trong nút, bạn sẽ thấy rằng hiệu suất mà bạn mong đợi chưa đạt được.

nodejs không quan tâm đến những gì ứng dụng thực sự thực hiện. Hãy nghĩ về nó như một công cụ rất nhanh, rất mạnh. Bạn có thể xây dựng bất cứ thứ gì với nó, nhưng bạn cần phải biết những gì công cụ được thiết kế để làm tốt nhất để biết khi nào sử dụng nó.

nodejs bạn đã làm việc ở mức thấp hơn - đó là lý do tại sao có rất nhiều gói giúp bạn thực hiện tất cả mọi thứ với nút; và nhiều cách bạn có thể lấy các thành phần và tạo ngăn xếp của riêng bạn - tùy thuộc vào những gì bạn đang xây dựng trên đầu trang của nút. Hãy nghĩ về nó như khối xây dựng Lego.

nút và django không loại trừ lẫn nhau. Bạn có thể sử dụng cả trong ứng dụng của bạn và khai thác điểm mạnh của họ và tận dụng lợi thế của những gì họ làm tốt nhất.


Theo như câu hỏi cụ thể của bạn:

Ý của tôi có được hình ảnh? Có ý kiến ​​gì không?

Tôi không biết. Bạn đã?

Có cần thêm thành phần nào nữa không? Để bắt đầu?

Câu trả lời cho điều này là có, bởi vì bạn không muốn xây dựng mọi thứ từ đầu. Mỗi ngăn xếp có các thành phần thư viện riêng để phát triển các dịch vụ. Đối với django, có django phần còn lại khuôn khổ (DRF).

Framework nào tốt nhất cho CRUD? Khung nào là tốt nhất cho RESTful? Bất kỳ mô-đun nào khác cần thiết? Trình tạo báo cáo tốt nhất để in? Công cụ sơ đồ tốt nhất?

Không có gì là "tốt nhất" cho bất cứ điều gì. Câu hỏi này chỉ là hỏi ý kiến. Nó giống như yêu cầu, nước trái cây tốt nhất là gì?

Những khuôn khổ được nhanh nhất và đáng tin cậy nhất cho CRUD sử dụng PostgreSQL

dân đã phát triển nhiều ứng dụng mạnh mẽ trên đầu trang của postgresql; tuy nhiên khi các nút lệnh bị ràng buộc với javascript - vẫn còn rất nhiều công việc đang được thực hiện trong lĩnh vực này.

Tôi có thể khóa thư viện (bí mật thương mại) trong cả hai môi trường không?

Có.

Có các công cụ tốt hơn để tạo ERP/Accounting không?

ERP và kế toán là hai điều rất khác nhau. Có rất nhiều gói/ứng dụng kế toán được viết bằng Python. Có rất ít hệ thống ERP được viết bằng Python.

Bạn không thể kết hợp cả hai và gộp lại với nhau.

Lợi ích khi sử dụng Angular trên đầu trang của Node.js là gì?

Lợi ích tương tự của việc sử dụng Góc trên đầu trang _____ (chèn phụ trợ ưa thích của bạn). Góc là một thư viện kết thúc.

Lợi ích giai thoại là cả Góc và Nút đều sử dụng cùng một ngôn ngữ lập trình.

+0

Cảm ơn bạn! Tôi giải thích rằng bức ảnh được nhúng của tôi đang đi đúng hướng. Và Django dễ viết hơn. Và về mặt lý thuyết tôi có thể xây dựng mọi thứ trong Angular (Bỏ qua cả Django và Node.js). Và kết nối từ Node.js đến Postgresql có thể tốt hơn. Và như tôi đã chỉ ra, tôi vẫn còn rất nhiều điều để học. Một chút rõ ràng hơn nhưng vẫn còn bối rối. – sibert

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