Tín hiệu lưu/xóa thường thuận lợi trong các trường hợp bạn cần thực hiện thay đổi không hoàn toàn cụ thể cho mô hình được đề cập hoặc có thể áp dụng cho các mô hình có điểm chung hoặc có thể được định cấu hình để sử dụng mô hình.
Một nhiệm vụ phổ biến trong các phương pháp được ghi đè save
là tạo các sên tự động từ một số trường văn bản trong một mô hình. Đó là một ví dụ về cái gì đó, nếu bạn cần thực hiện nó cho một số mô hình, sẽ được hưởng lợi từ việc sử dụng tín hiệu pre_save
, nơi bộ xử lý tín hiệu có thể lấy tên của trường sên và tên của trường để tạo ra sên từ . Khi bạn có thứ gì đó tương tự như vậy, mọi chức năng nâng cao mà bạn đưa ra cũng sẽ áp dụng cho tất cả các kiểu máy - ví dụ: tìm kiếm con sên mà bạn sắp thêm vào cho kiểu mô hình được đề cập, để đảm bảo tính duy nhất.
ứng dụng
Reusable thường được hưởng lợi từ việc sử dụng các tín hiệu - nếu các chức năng mà họ cung cấp có thể được áp dụng cho bất kỳ mô hình, họ thường (trừ khi nó là không thể tránh khỏi) sẽ không muốn người dùng phải trực tiếp chỉnh sửa mô hình của mình để được hưởng lợi từ nó.
Với django-mptt, ví dụ, tôi đã sử dụng tín hiệu pre_save
để quản lý một tập hợp các lĩnh vực trong đó mô tả một cấu trúc cây cho mô hình đó là về để được tạo ra hoặc cập nhật và pre_delete
tín hiệu để loại bỏ các chi tiết cấu trúc cây cho đối tượng là đã xóa và toàn bộ cây con của đối tượng trước nó và chúng sẽ bị xóa. Do sử dụng tín hiệu, người dùng không phải thêm hoặc sửa đổi các phương thức save
hoặc delete
trên mô hình của họ để thực hiện quản lý này cho họ, họ chỉ cần cho phép django-mptt biết họ muốn quản lý mô hình nào.
Nguồn
2008-10-05 08:38:39
Không, tín hiệu chặn trừ khi bạn đẻ trứng đề một cách rõ ràng. – muhuk
@muhuk là đúng, tín hiệu chặn quá trình của bạn. Nếu bạn muốn tránh các quá trình bị chặn, hãy sử dụng các công cụ như gevent, cần tây hoặc các công cụ không đồng bộ khác. – pydanny
Tôi cho nó một -1 vì các điểm của muhuk và pydanny. Dường như đó là lời khuyên hoàn toàn sai lầm. Yêu cầu sẽ không kết thúc cho đến khi xử lý tín hiệu được thực hiện. Vì vậy, cần tây có vẻ như một giải pháp tốt, đó là những gì tôi thường sử dụng trong các dự án django của tôi. –