2008-09-04 43 views
40

Cách tốt nhất để bố trí một dự án django lớn là gì? Các hướng dẫn này cung cấp các hướng dẫn đơn giản để thiết lập ứng dụng, mô hình và chế độ xem nhưng có ít thông tin hơn về cách ứng dụng và dự án được chia nhỏ, mức độ chia sẻ cho phép/cần thiết giữa các ứng dụng trong một dự án điển hình (rõ ràng là phụ thuộc phần lớn vào dự án) và cách lưu giữ các mẫu chung.Thiết kế dự án/Bố cục FS cho các dự án django lớn

Có ai có ví dụ, đề xuất và giải thích là lý do tại sao bố cục dự án nhất định tốt hơn bố cục khác không? Tôi đặc biệt quan tâm đến sự kết hợp của một số lượng lớn các bài kiểm tra đơn vị (2-5x kích thước của cơ sở mã thực tế) và chuỗi bên ngoài/mẫu.

Trả lời

17

Các nguyên tắc chính tương tự như bất kỳ dự án mã lớn nào khác. Ứng dụng phải giải quyết một trách nhiệm được xác định rõ ràng. Tên "ứng dụng" là từ sai; Ứng dụng Django nên được nghĩ đến nhiều hơn như các thành phần có thể tái sử dụng có thể được cắm lại với nhau để tạo ra một ứng dụng thực sự. Các thử nghiệm cho mỗi ứng dụng phải được chứa trong ứng dụng đó. Các ứng dụng nên được tách rời khỏi nhau càng nhiều càng tốt, nhưng rõ ràng sẽ có sự phụ thuộc, vì vậy mục tiêu phải là giữ cho biểu đồ phụ thuộc đơn giản và lành mạnh nhất có thể.

Tôi muốn giữ tất cả các mẫu cho dự án trong một thư mục mẫu toàn dự án, với thư mục con cho mỗi ứng dụng (sử dụng thư mục con mẫu cho mỗi ứng dụng là một quy ước rất mạnh ở Django, vì nó tránh tên mẫu xung đột giữa các ứng dụng). Lý do cho một thư mục mẫu toàn dự án là mẫu, cây thừa kế mẫu và tên khối có thể khá cụ thể cho dự án, do đó rất khó cung cấp mẫu ứng dụng "mặc định" có thể cắm vào bất kỳ dự án nào.Đã có một số nỗ lực để giải quyết các quy ước đặt tên chuẩn cho các mẫu nền tảng cơ sở và các khối mà chúng xác định, nhưng tôi chưa thấy một tiêu chuẩn nổi bật nào (cách chúng thực hiện tại Pinax có lẽ là gần nhất chúng ta phải Tiêu chuẩn).

Re "string externalization", nếu bạn muốn nói i18n và l10n, Django có hỗ trợ mạnh mẽ cho các địa điểm đó và tiêu chuẩn nơi đặt tệp .po - kiểm tra docs.

6

Trang này làm một công việc tốt trong việc giải quyết một số câu hỏi của tôi: http://www.b-list.org/weblog/2006/sep/10/django-tips-laying-out-application/

Cụ thể:

  1. Để xác định thẻ mẫu tùy chỉnh hoặc các bộ lọc, bạn phải tạo một thư mục con trong ứng dụng của thư mục có tên templatetags và nó phải chứa một tệp có tên __init__.py để nó có thể được nhập dưới dạng một mô-đun Python.
  2. Để xác định các bài kiểm tra đơn vị sẽ tự động được nhận thấy bởi khung kiểm tra của Django, hãy đặt chúng trong một mô-đun được gọi là kiểm tra (có thể là tệp có tên tests.py hoặc thư mục có tên là tests). Khung kiểm tra cũng sẽ tìm thấy bất kỳ tài liệu nào trong mô-đun đó, nhưng vị trí ưa thích cho các tài liệu đó, tất nhiên là các tài liệu về các lớp hoặc các chức năng mà chúng được thiết kế để kiểm tra.
  3. Để cung cấp SQL tùy chỉnh sẽ được thực hiện ngay sau khi ứng dụng của bạn được cài đặt, hãy tạo một thư mục con có tên là sql bên trong thư mục của ứng dụng; tên tệp phải giống như tên của các mô hình có bảng mà chúng sẽ hoạt động; ví dụ: nếu bạn có một ứng dụng có tên là weblog có chứa một mô hình có tên Entry, thì tệp sql/entry.sql bên trong thư mục của ứng dụng có thể được sử dụng để sửa đổi hoặc chèn dữ liệu vào bảng mục nhập ngay khi nó được tạo.

Các lưu ý về tests.py và kiểm tra (thư mục) cũng giữ cho các mô hình, giúp giải quyết vấn đề có cách để kiểm tra nhiều (hoặc mô hình) cho một tập tin.

Tôi vẫn muốn xem một số ví dụ/đề xuất về phân tích ứng dụng/dự án và các trang web django lớn hoạt động tốt.

+0

Trong câu trả lời này, bạn cần phải thoát khỏi dấu gạch dưới ban đầu trong \ _ \ _ init__.py để tránh nó được diễn giải là văn bản in đậm bởi công cụ đánh dấu. – akaihola

3

Pinax project được xây dựng xung quanh ý tưởng về các ứng dụng có thể tái sử dụng nhỏ, dễ dàng được kết hợp với nhau thành một dự án. Họ đã sử dụng dự án Cloud 27 làm dự án demo.

Dự án Django tôi đang làm việc (gọi là Basie. Đó là trước 0.1, do đó không có liên kết nào.) Đang cố gắng theo mô hình Pinax và cho đến nay nó hoạt động khá tốt.

1

Bố cục hiện tại của tôi bắt nguồn từ tôi muốn có phiên bản thử nghiệm của các trang web của tôi. Điều này có nghĩa là có hai dự án cho mỗi trang web, vì chúng cần cấu hình khác nhau và buộc tôi phải di chuyển tất cả các ứng dụng ra khỏi dự án.

Tôi đã tạo hai thư mục: $ APP_ROOT/devel và $ APP_ROOT/prod. Chúng chứa tất cả các ứng dụng. Sử dụng kiểm soát nguồn (trong trường hợp của tôi git) Tôi có các ứng dụng trong phát triển tại bản sửa đổi CHÍNH, trong khi các ứng dụng trong sản phẩm bị khóa vào thẻ PROD. Các mẫu cũng có thư mục riêng với bố cục giống như các ứng dụng.

Bây giờ tôi có thể thực hiện tất cả sự phát triển của mình trong thư mục ứng dụng phát triển và thư mục mẫu phù hợp. Khi tôi có điều gì đó tôi hài lòng, tôi gắn thẻ bản sửa đổi đó và cập nhật sản phẩm.

1

Tôi thực sự thích Randall Degges' bài về chủ đề này. Anh ấy để lại thông tin về cách dán các tệp cài đặt lại với nhau, nhưng tôi sẽ có một bài đăng trên đó tôi có thể liên kết, nhưng hiện tại bất kỳ ai cũng có thể xem my repo nơi tôi bao gồm một số hướng trong readme.

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