nơi chính xác logic kinh doanh python nên được đặt trong django


26

Tôi mới bắt đầu học Django / Python / Web Development. Vấn đề này đã gây rắc rối cho tôi trong một thời gian.

Tôi đang tạo một ứng dụng với nhiều mẫu trong Django. Tôi có một lượt xem, về cơ bản chỉ là hiển thị các phản hồi cho các mẫu tương ứng và tôi có một mô hình mô tả nơi tôi đã cấu trúc DB của mình. Trong một trong các mẫu của tôi, tôi cần tải lên một hình ảnh (mà tôi có thể làm được) và tôi cần chạy một logic dựa trên các tính năng của hình ảnh được tải lên (chưa được thực hiện). Logic này liên quan đến rất nhiều tính toán nặng nề. Sau khi thực hiện các tính toán, logic sẽ trả về một số thông tin được xử lý (tọa độ) cho mẫu.

Tôi đã có thể thực hiện tất cả các hành động này thành công trong một ứng dụng máy tính để bàn độc lập python lần lượt gọi các tệp python. Tuy nhiên, vì bây giờ tôi muốn biến nó thành một ứng dụng web, tôi đã bắt đầu sử dụng khung Django.

Tôi đã thực hiện rất nhiều tìm kiếm nhưng tôi vẫn không thể tìm ra chính xác nơi tôi nên đặt tệp Python này chứa tất cả logic. Tôi có nên có một tập tin dựa trên lớp khác (logic.py)và gọi nó từ view.py? Tôi đã googled và thấy rằng nhiều nhà phát triển đang đặt logic kinh doanh của họ trong mô hình của họ trong Django. Tuy nhiên, tôi cảm thấy nó là trực giác không đúng vì mô hình nên giao tiếp độc quyền với mặt sau. Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn trước.



Tìm thấy một bài viết thảo luận rộng rãi về chủ đề này (với ý tưởng kim tự tháp, không phải django). Có một số thaughts nhạy cảm: nando.oui.com.br/2014/04/01/ từ
kratenko

Câu trả lời:


16

Tôi đã thực hiện rất nhiều tìm kiếm nhưng tôi vẫn không thể tìm ra chính xác nơi tôi nên đặt tệp Python này chứa tất cả logic.

Có một số tùy chọn, tùy thuộc vào yêu cầu của bạn là gì:

  1. Thêm logic để ví dụ Imagemô hình. Đây là một tùy chọn hữu ích nếu bạn cần lưu trữ dữ liệu meta trên mỗi hình ảnh trong cơ sở dữ liệu và mỗi phiên bản mô hình (mỗi hình ảnh) được xử lý bởi chính nó.

  2. Thêm logic dưới dạng một Imagelớp Python đơn giản , ví dụ như trong một tệp được gọi image.py. Không có gì trong Django hạn chế bạn khỏi thêm logic khác hơn rằng trong viewshoặc modelsmô-đun. Đây là một tùy chọn tốt nếu logic hình ảnh là thành phần trung tâm của ứng dụng Django của bạn (ví dụ: ứng dụng xử lý hình ảnh).

  3. Tạo một dự án Python riêng cung cấp logic, sau đó gọi nó từ khung nhìn của bạn. Đảm bảo cài đặt dự án này trong môi trường Python của ứng dụng Django. Tùy chọn này hợp lệ nếu mục đích của ứng dụng Django của bạn là tải lên và xem hình ảnh hoặc hiển thị kết quả xử lý hình ảnh để đáp ứng trực tiếp yêu cầu của người dùng, nhưng cũng có thể sử dụng các dự án khác để xử lý hình ảnh.

  4. Tạo một ứng dụng riêng biệt xử lý các yêu cầu không đồng bộ và được chạy riêng với ứng dụng Django. Tùy chọn này hữu ích nếu bạn cần tách rời quá trình xử lý hình ảnh khỏi chu kỳ yêu cầu của ứng dụng, xử lý số lượng lớn hình ảnh hoặc khi mỗi phép tính mất quá nhiều thời gian để giải quyết trong khoảng thời gian của chu kỳ yêu cầu (trong vòng tối đa 500ms đến 1 giây) .

Tôi cảm thấy nó là trực giác không đúng vì mô hình nên giao tiếp độc quyền với mặt sau.

Không có gì trong Django yêu cầu một mô hình để giao tiếp với mặt sau, hay đúng hơn là cơ sở dữ liệu. Tôi nghĩ rằng bạn đang trộn lẫn ngữ nghĩa của những gì Django thường xem là một mô hình (cụ thể là sự trừu tượng hóa của một hoặc một số bảng trong cơ sở dữ liệu), so với mô hình thuật ngữ như một cấu trúc thiết kế (ví dụ như trong Thiết kế hướng miền).


Cảm ơn! Nó thực sự sâu sắc. Tôi cảm thấy tùy chọn số 3 là đủ tốt cho tôi. :)
adrita

Bạn có thể đánh giá câu trả lời phủ định nhưng vui lòng thêm nhận xét để tôi có thể cải thiện câu trả lời
miraculixx

5

Daniel Greenfeld, đồng tác giả của "Two Scoops of Django, khuyên rằng logic kinh doanh nên có trong các mô hình" khi có thể, hoặc trong các hình thức nếu bạn phải. "Đối với khả năng sao chép của Bart, django có thể giống với MVC nhưng nó là không phải là MVC. Như đã giải thích ở đây trong tài liệu django chính thức . @adrita, tôi nghĩ bạn có thể cần phải xem lại tài liệu chính thức để giúp bạn hiểu khái niệm về mô hình, khung nhìn và mẫu tốt hơn một chút.


cảm ơn lời đề nghị của bạn chắc chắn sẽ xem qua tài liệu :)
adrita 17/07 '

Rất vui vì bạn đã sửa nó, @miraculixx đã đưa ra một lời giải thích chắc chắn. Nếu bạn đang ở trên fb, hãy tham gia nhóm khung python django.
chết

2

Trong tài liệu chính thức của Django https://docs.djangoproject.com/en/1.11/ , nó nói:

Django có khái niệm về các lượt xem của người Viking, để gói gọn logic chịu trách nhiệm xử lý yêu cầu của người dùng và trả về phản hồi. Tìm tất cả những gì bạn cần biết về lượt xem thông qua các liên kết dưới đây:

Django khuyến nghị logic phải được chứa trong các khung nhìn.


3
Điều đó không nhất thiết giống như logic kinh doanh.
FirstLastname

1
Tôi không đồng ý với cách giải thích của tài liệu Django. Ở những nơi khác trong tài liệu Django (ví dụ Model.clean()), nó được ngụ ý rõ ràng hơn một chút rằng (nếu chúng ta chỉ đơn giản là một dự án Django trong thế giới thực cho các mô hình, mẫu và khung nhìn) - logic kinh doanh (hoặc ít nhất là, xác nhận) thuộc về lớp mô hình. Lưu ý rằng tôi đã không bao gồm các hình thức trong đơn giản hóa đó, cũng có thể chấp nhận được.
Kye R
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.