Điều gì là ngăn bạn sử dụng myproduct.myproduct
? Những gì bạn cần để đạt được điều đó bao gồm làm điều này:
django-admin.py startproject myproduct
cd myproduct
mkdir myproduct
touch myproduct/__init__.py
touch myproduct/models.py
touch myproduct/views.py
và như thế. Nó có giúp ích gì không nếu tôi nói views.py
không cần phải gọi views.py
? Với điều kiện bạn có thể đặt tên, trên đường dẫn python, một hàm (thường là pack.package.view.feft_name) nó sẽ được xử lý. Đơn giản như vậy. Tất cả những thứ "dự án" / "ứng dụng" này chỉ là các gói python.
Bây giờ, làm thế nào bạn có nghĩa vụ phải làm điều đó? Hay đúng hơn, làm thế nào tôi có thể làm điều đó? Vâng, nếu bạn tạo ra một mảnh quan trọng của chức năng tái sử dụng, như nói một trình soạn thảo đánh dấu, đó là khi bạn tạo ra một "ứng dụng cấp cao nhất" mà có thể chứa widgets.py
, fields.py
, context_processors.py
vv - tất cả mọi thứ bạn có thể muốn nhập khẩu.
Tương tự, nếu bạn có thể tạo một cái gì đó giống như một blog ở định dạng khá chung chung trong các cài đặt, bạn có thể gói nó trong một ứng dụng, với mẫu riêng, thư mục nội dung tĩnh, v.v. và định cấu hình phiên bản của dự án django để sử dụng nội dung của ứng dụng.
Không có quy tắc cứng và nhanh nào nói rằng bạn phải làm điều này, nhưng đó là một trong những mục tiêu của khung. Thực tế là tất cả mọi thứ, các mẫu được bao gồm, cho phép bạn đưa vào từ một số cơ sở chung có nghĩa là blog của bạn sẽ phù hợp với bất kỳ thiết lập nào khác, chỉ đơn giản bằng cách chăm sóc phần riêng của nó.
Tuy nhiên, để giải quyết mối quan tâm thực sự của bạn, vâng, không có gì nói rằng bạn không thể làm việc với thư mục dự án cấp cao nhất. Đó là những gì ứng dụng làm và bạn có thể làm điều đó nếu bạn thực sự muốn. Tôi có xu hướng không, tuy nhiên, vì một số lý do:
- Thiết lập mặc định của Django không làm điều đó.
- Thông thường, tôi muốn tạo một ứng dụng chính, vì vậy tôi tạo một ứng dụng, thường được gọi là
website
. Tuy nhiên, vào một ngày sau tôi có thể muốn phát triển chức năng ban đầu chỉ cho trang web này. Với quan điểm làm cho nó có thể tháo rời (dù tôi có làm hay không) tôi có xu hướng tạo một thư mục riêng. Điều này cũng có nghĩa là tôi có thể loại bỏ chức năng đã nói chỉ bằng cách hủy liên kết gói đó khỏi cấu hình và xóa thư mục, thay vì xóa phức tạp các url bên phải khỏi thư mục url toàn cầu.
- Rất thường xuyên, ngay cả khi tôi muốn làm cho một cái gì đó độc lập, nó cần một nơi nào đó để sống trong khi tôi chăm sóc nó / làm cho nó độc lập. Về cơ bản là trường hợp trên, nhưng đối với những thứ tôi có ý định làm chung.
- Thư mục cấp cao nhất của tôi thường chứa một vài thứ khác, bao gồm nhưng không giới hạn ở các tập lệnh wsgi, tập lệnh sql, v.v.
- phần mở rộng quản lý của django dựa vào thư mục con. Vì vậy, nó có ý nghĩa để đặt tên gói một cách thích hợp.
Nói tóm lại, lý do có một quy ước cũng giống như bất kỳ quy ước nào khác - nó giúp ích khi nói đến những người khác làm việc với dự án của bạn. Nếu tôi thấy fields.py
tôi ngay lập tức mong đợi mã trong trường đó để phân lớp trường django, trong khi nếu tôi thấy inputtypes.py
tôi có thể không rõ ràng về điều đó có nghĩa là gì nếu không nhìn vào nó.