2008-12-21 33 views
7

Tôi chỉ muốn thử xây dựng một dự án với django. Vì vậy, tôi có một câu hỏi (cơ bản) về cách quản lý một dự án như vậy. Vì tôi không thể tìm thấy bất kỳ hướng dẫn nào hay như vậy về cách chia dự án thành các ứng dụng.Bạn quản lý các ứng dụng Django của mình như thế nào?

Hãy lấy một loại SO làm ví dụ. Bạn sẽ sử dụng ứng dụng nào? Tôi muốn nói rằng cần có các ứng dụng "người dùng" và "câu hỏi". Nhưng điều gì sẽ xảy ra nếu có một hệ thống chủ đề với các bài viết tĩnh. Có lẽ họ cũng có thể nhận được phiếu bầu. Cách xây dựng cấu trúc ứng dụng sau đó? Một ứng dụng cho "câu hỏi", "phiếu bầu" và "chủ đề" hoặc chỉ một ứng dụng "nội dung"?

Tôi không biết phải làm gì. Có lẽ đó là bởi vì tôi không biết nhiều về Django, nhưng tôi quan tâm ...

Trả lời

0

Tôi sẽ cho bạn biết làm thế nào tôi tiếp cận câu hỏi như vậy: Tôi thường ngồi với một tờ giấy và vẽ các hộp (chức năng) và mũi tên (phụ thuộc lẫn nhau giữa các chức năng). Tôi chắc chắn có những phương pháp hay những thứ khác có thể giúp bạn, nhưng cách tiếp cận của tôi thường làm việc cho tôi (YMMV, tất nhiên).

Biết được trang web được cho là cơ bản. ;)

+0

Nhưng nơi để vẽ đường thẳng giữa một chức năng và một chức năng khác? – okoman

5

Bạn nên thử và tách riêng dự án trong càng nhiều ứng dụng càng tốt. Đối với hầu hết các dự án, một ứng dụng sẽ không chứa nhiều hơn 5 mô hình. Ví dụ một dự án như SO sẽ có các ứng dụng riêng biệt cho UsersProfiles, Questions, Tags (có sẵn sàng trong django cho điều này), vv. Nếu có một hệ thống với các trang tĩnh sẽ là một ứng dụng riêng biệt (có sẵn sàng vì mục đích này). Bạn cũng nên thử và làm cho các ứng dụng của bạn trở nên phổ biến nhất có thể, vì vậy bạn có thể sử dụng lại chúng trong các dự án khác. Có một số presentation tốt trên các ứng dụng có thể tái sử dụng.

+3

+1: nhỏ và có thể tái sử dụng - tập trung vào một hoặc một vài thực thể có liên quan chặt chẽ. –

3

Giống như bất kỳ nhóm phụ thuộc nào khác ... cố gắng tìm các khía cạnh độc lập hữu ích nhất của dự án và tạo các ứng dụng độc lập đó. Các ứng dụng Django khác sẽ có chức năng cấp cao hơn và sử dụng lại các phần của ứng dụng cấp thấp nhất mà bạn đã thiết lập.

Trong dự án của tôi, tôi có một ứng dụng lịch với đối tượng Sự kiện riêng trong các mô hình của nó. Tôi cũng có một cơ sở dữ liệu đi chung xe, và cho thời gian khởi hành và thời gian tôi sử dụng đối tượng Sự kiện của lịch ngay trong bảng RideShare của tôi. Cơ sở dữ liệu đi chung xe là lịch nhận thức và nhận tất cả giao diện xuất và lịch đẹp mắt từ ứng dụng lịch cho 'miễn phí'.

Có một số thủ thuật để ứng dụng có thể tái sử dụng, như đặt tên cho thư mục mẫu: project/app2/templates/app2/index.html. Điều này cho phép bạn tham khảo app2/index.html từ bất kỳ ứng dụng nào khác và nhận mẫu phù hợp. Tôi đã chọn một trong đó nhìn vào các ứng dụng tái sử dụng được xây dựng trong Django chính nó. Pinax là một chút của một con quái vật kích thước khôn ngoan nhưng nó cũng thể hiện một cấu trúc ứng dụng tái sử dụng tốt đẹp.

Nếu nghi ngờ, hãy quên các ứng dụng có thể sử dụng lại ngay bây giờ. Đặt tất cả tin nhắn và cuộc thăm dò của bạn trong một ứng dụng và trải qua một vòng quay. Bạn sẽ khám phá ra trong quá trình bước nào cảm thấy không cần thiết, và có thể bị phá vỡ như một cái gì đó độc lập trong tương lai.

6

Không có quy tắc cứng nhắc và nhanh chóng, nhưng tôi cho rằng tốt hơn là nên sử dụng các ứng dụng chuyên biệt hơn. Lý tưởng nhất là một ứng dụng sẽ chỉ xử lý một mối quan tâm chức năng: tức là "gắn thẻ" hoặc "nhận xét" hoặc "xác thực/xác thực" hoặc "bài đăng". Loại thiết kế này cũng sẽ giúp bạn sử dụng lại các ứng dụng nguồn mở sẵn có thay vì phát minh lại bánh xe (tức là Django đi kèm với authcomments ứng dụng, django-tagging hoặc django-taggable gần như chắc chắn có thể làm những gì bạn cần, v.v.).

Generic foreign keys có thể giúp bạn tách các ứng dụng như gắn thẻ hoặc nhận xét có thể được áp dụng cho các mô hình từ một số ứng dụng khác.

3

Một câu hỏi hay để tự hỏi khi quyết định có viết ứng dụng là "tôi có thể sử dụng ứng dụng này trong một dự án khác không?". Nếu bạn nghĩ rằng bạn có thể, sau đó xem xét những gì nó sẽ làm để làm cho các ứng dụng độc lập nhất có thể; Làm thế nào bạn có thể làm giảm sự phụ thuộc để ứng dụng không dựa vào bất cứ điều gì cụ thể cho một dự án cụ thể.

Một số trong những cách bạn có thể làm điều này là:

  • Cho mỗi ứng dụng riêng của mình urls.py
  • Cho phép loại mô hình được thông qua tại như thông số chứ không phải tuyên bố một cách rõ ràng những gì mô hình được sử dụng trong của bạn lượt xem. Chế độ xem chung sử dụng nguyên tắc này.
  • Làm cho mẫu của bạn dễ dàng bị ghi đè bằng cách có một số loại tham số template_name được chuyển vào trong url của bạn. Điều này có nghĩa là đặt tên chế độ xem của bạn trong url và tạo phương thức get_absolute_url trên mô hình của bạn.
  • Trong một số trường hợp như Gắn thẻ, GenericForeignKeys có thể được sử dụng để liên kết một mô hình trong ứng dụng của bạn với bất kỳ mô hình nào khác, bất kể mô hình có ForeignKeys "nhìn lại" không.
Các vấn đề liên quan