2009-10-10 50 views
6

Tôi có tính năng được quản trị viên (nhập cơ sở dữ liệu) có thể mất chút thời gian để hoàn thành, vì vậy tôi muốn hiển thị một số phản hồi cho người dùng trong thời gian đó - ví dụ: thanh tiến trình hoặc chỉ một số tin nhắn. Ngay cả việc gửi trang trong các phần trong hành động dài cũng đủ.Django - hiển thị tiến trình hành động

Cách đơn giản nhất để thực hiện điều đó ở Django là gì?

+0

tại sao không tiến bộ thanh? .. bạn có thể xây dựng một chút, xin vui lòng? – 0100110010101

+0

Thanh tiến trình cũng sẽ ổn, nhưng tôi không biết làm thế nào tôi có thể kiểm soát nó từ chức năng thực hiện hành động – hmp

Trả lời

1

Không có cách nào để làm điều này mà không có một số loại kịch bản phía máy khách, tức là Ajax. Bạn cần một cái gì đó sẽ thăm dò ý kiến ​​máy chủ theo chu kỳ thường xuyên và hiển thị một phản ứng cho người dùng. Có a snippet cho biết cách thực hiện điều này.

Tất nhiên, để thực hiện điều đó, bạn cũng sẽ phải tự trang bị cho bản thân quá trình nhập ngoại tuyến. Thao tác này sẽ thực hiện việc nhập và ghi lại tiến trình của nó ở đâu đó thường xuyên (trong một tệp hoặc cơ sở dữ liệu) để Ajax có thể truy vấn nó. Cách tốt nhất để làm điều này có thể là sử dụng celery, hàng đợi nhiệm vụ phân tán dựa trên Django.

Cuối cùng, bạn sẽ cần một khung nhìn đơn giản mà Ajax sẽ gọi, sẽ truy vấn quy trình chạy dài (hoặc xem bản ghi tiến trình mà nó tạo) và báo cáo lại cho máy khách.

Vì vậy, khá phức tạp.

3
  1. Ajax Polling - Sử dụng bộ hẹn giờ phía máy khách, bạn liên tục thăm dò ý kiến ​​máy chủ về trạng thái của nó. Quá trình này là như thế này: Người dùng cấu hình các chi tiết cơ sở dữ liệu và lượt truy cập 'tải lên'. Việc truyền tệp và yêu cầu trang bắt đầu một quá trình không đồng bộ trên máy chủ để thực hiện nhập cơ sở dữ liệu. Khi người dùng nhấp vào tải lên nó bắt đầu một bộ đếm thời gian phía máy khách mà trong khoảng thời gian thường xuyên gửi một yêu cầu AJAX đến máy chủ để hỏi nó về tiến trình của nó. Máy chủ trả về JSON và kịch bản lệnh phía máy khách tìm ra những gì nó muốn làm với nó.

  2. COMET - Tôi không quen thuộc với điều này, nhưng AJAX truyền thống hoạt động bởi khách hàng gửi yêu cầu đến máy chủ. Nó được gọi là giao tiếp 'kéo'. Trong COMET, nó đang đẩy. Máy chủ đẩy dữ liệu trở lại máy khách về tiến trình của nó, ngay cả khi máy chủ không yêu cầu. Điều này tạo ra một tình huống ít căng thẳng trên máy chủ hơn là bỏ phiếu. Google sẽ đưa ra một số kết quả cho những người sử dụng COMET with Django.

  3. Reverse AJAX - Tương tự như COMET. Reverse Ajax with Django.

(Tôi xin lỗi, tôi biết ít nhất khoảng cuối cùng 2, nhưng tôi figured bạn muốn ít nhất muốn biết chúng tồn tại)

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